43

Je crée une application qui affichera un lien sur Twitter. Le code suivant refuse d'emballer pour moi, jetant l'erreur suivante:Emballage Blackberry OAuth erreur de lancement de l'application

Error: Cannot run program "jar": CreateProcess error=2, The system cannot find the file specified

Voici le code:

public class ShowAuthBrowser extends MainScreen implements OAuthDialogListener 
{ 
    private final String CONSUMER_KEY = "<Consumer>"; 
    private final String CONSUMER_SECRET = "<Secret>"; 
    private LabelField _labelStutus; 
    private OAuthDialogWrapper pageWrapper = null; 
    public StoreToken _tokenValue; 
    public BrowserField b = new BrowserField(); 
    Manager _authManager; 
    Manager _pinManager; 
    ButtonField authButton; 
    TextField authPin; 

    public ShowAuthBrowser()  
    { 
     _authManager = new VerticalFieldManager(NO_VERTICAL_SCROLL | 
               NO_VERTICAL_SCROLLBAR); 
     _pinManager = new HorizontalFieldManager(NO_VERTICAL_SCROLL | 
               NO_VERTICAL_SCROLLBAR); 
     authButton = new ButtonField("OK"); 
     authPin = new TextField(Field.EDITABLE); 
     _authManager.add(_labelStutus); 
     _authManager.add(b); 

     _pinManager.add(authButton); 
     _pinManager.add(authPin); 


     pageWrapper = new BrowserFieldOAuthDialogWrapper(b,CONSUMER_KEY, 
          CONSUMER_SECRET,null,this); 
     pageWrapper.setOAuthListener(this);  

     add(_pinManager); 
     add(_authManager); 

     authButton.setChangeListener(new FieldChangeListener() { 
      public void fieldChanged(Field field, int context) { 
       if(field == authButton) { 
         doAuth(authPin.getText()); 
       } 
      } 
     }); 

    } 

    public void doAuth(String pin) 
    { 
     try 
     { 
      if (pin == null) 
      { 
       pageWrapper.login(); 
      } 
      else 
      { 
       this.deleteAll(); 
       add(b); 
       pageWrapper.login(pin); 
      } 

     } 
     catch (Exception e) 
     { 
      final String message = "Error logging into Twitter: " + 
               e.getMessage(); 
      Dialog.alert(message); 
     }   
    } 

    public void onAccessDenied(String response) { 

     updateScreenLog("Access denied! -> " + response); 

    } 

    public void onAuthorize(final Token token) { 

     final Token myToken = token; 
     _tokenValue = StoreToken.fetch(); 
     _tokenValue.token = myToken.getToken(); 
     _tokenValue.secret = myToken.getSecret(); 
     _tokenValue.userId = myToken.getUserId(); 
     _tokenValue.username = myToken.getUsername(); 
     _tokenValue.save(); 

     UiApplication.getUiApplication().invokeLater(new Runnable() { 

      public void run() { 
       deleteAll(); 
       Credential c = new Credential(CONSUMER_KEY, 
               CONSUMER_SECRET, 
               myToken); 
       PostTweet tw = new PostTweet(); 
       String message="Testing BB App"; 
       boolean done=false; 
       done=tw.doTweet(message, c); 
       if(done == true) 
       { 
        Dialog.alert("Tweet succusfully..."); 
        close();  
       } 
      } 
     }); 

    } 

    public void onFail(String arg0, String arg1) { 
     updateScreenLog("Error authenticating user! -> " + arg0 + ", " + arg1); 
    } 

    private void updateScreenLog(final String message) 
    { 
     UiApplication.getUiApplication().invokeLater(new Runnable() { 

      public void run() { 
       _labelStutus.setText(message);     
      } 
     }); 
    } 
} 

La chose étrange est, si je retire les lignes suivantes, les paquets très bien :

authButton.setChangeListener(new FieldChangeListener() { 
     public void fieldChanged(Field field, int context) { 
      if(field == authButton) { 
        doAuth(authPin.getText()); 
      } 
     } 
    }); 

Toute aide serait appréciée car j'ai vraiment besoin de l'écouteur de champ attaché à cet écran.

Avec le code comme authButton.setChangeListener(null), il empaquette avec succès mais j'ai besoin de code avec FieldChangeListener pour faire quelque chose.

+0

emballage essayer avec le code comme 'authButton.setChangeListener (null)' - juste pour vous assurer qu'il est pas la référence à FieldChangeListener qui cause des problèmes – gnat

+0

Cela fait un paquet avec succès mais j'en ai besoin pour faire quelque chose. –

+0

vérifiez vos paramètres de construction; de ce que vous décrivez ressemble plutôt à l'étape de l'emballage, l'utilitaire jar ne peut pas trouver le fichier jar ou le répertoire contenant le fichier 'FieldChangeListener.class'. Vérifiez particulièrement si vous empaquetez contre la version appropriée de Blackberry API – gnat

Répondre

2

Assurez-vous que votre chemin java bin est défini dans la variable d'environnement.

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

et jeter un oeil sur les 3 derniers messages dans le site Web suivant:

http://supportforums.blackberry.com/t5/Java-Development/I-O-Error-Cannot-run-program-quot-jar-quot-CreateProcess-error-2/td-p/522638

Assurez-vous également que le kit de développement logiciel Java® (Java SDK/JDK) est installé sur l'ordinateur et une version correcte du Java SDK est utilisée.

http://supportforums.blackberry.com/t5/Java-Development/I-O-Error-CreateProcess/ta-p/445949

Comme mentionné dans Scott Boettger commentaire ci-dessous, ce poste pourrait être utile aussi bien: http://supportforums.blackberry.com/t5/Java-Development/why-cause-more-then-100-compiled-classes-packaging-I-O-error/m-p/520282

+3

J'ai définitivement installé le SDK. Mais votre message sur le poste m'a conduit à ce poste: http://supportforums.blackberry.com/t5/Java-Development/why-cause-more-then-100-compiled-classes-packaging-I-O-error/m-p/520282. J'ai un assez gros projet avec beaucoup de classes compilées. –