43

Я создаю приложение, которое разместит ссылку на Twitter. Следующий код отказывается упаковать для меня, выбрасывая следующее сообщение об ошибке:Packaging Ошибка BlackBerry OAuth для приложения

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

Вот код:

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);     
      } 
     }); 
    } 
} 

нечетная вещь, если удалить следующие строки, это пакеты просто отлично :

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

Любая помощь будет оценена, так как мне действительно нужен слушатель поля, прикрепленный к этому экрану.

С кодом, подобным authButton.setChangeListener(null), он успешно работает, однако мне нужен код с FieldChangeListener, чтобы что-то сделать.

+0

попробовать упаковка с кодом, как 'authButton.setChangeListener (нулевое значение)' - просто чтобы убедиться, что это не ссылка на FieldChangeListener, вызывающая проблемы – gnat

+0

Это действительно успешно работает, но мне это нужно, чтобы что-то сделать. –

+0

проверьте настройки сборки; из того, что вы описываете, скорее похоже на этапе упаковки, утилита jar не может найти файл jar или каталог, содержащий файл FieldChangeListener.class'. Особенно проверьте, не упакован ли пакет на правильную версию Blackberry API. – gnat

ответ

2

Убедитесь, что путь к java bin задан в переменной окружения.

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

и посмотрите на последние 3 сообщений в следующем веб-сайте:

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

Также убедитесь, что набор инструментальных средств разработки программного обеспечения Java® (Java SDK/JDK) установлен на компьютер и правильная версия Java SDK.

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

Как уже упоминалось в Скотт Boettger комментарий ниже, этот пост может быть полезным, а также: http://supportforums.blackberry.com/t5/Java-Development/why-cause-more-then-100-compiled-classes-packaging-I-O-error/m-p/520282

+3

У меня определенно установлен SDK. Но ваш пост поставил меня на этот пост: http://supportforums.blackberry.com/t5/Java-Development/why-cause-more-then-100-compiled-classes-packaging-I-O-error/m-p/520282. У меня есть довольно большой проект с большим количеством скомпилированных классов. –

Смежные вопросы