【问题标题】:Packaging Blackberry OAuth app throwing error打包黑莓 OAuth 应用程序抛出错误
【发布时间】:2012-05-20 03:32:03
【问题描述】:

我正在创建一个将链接发布到 Twitter 上的应用程序。以下代码拒绝为我打包,抛出如下错误:

错误:无法运行程序“jar”:CreateProcess error=2,系统找不到指定的文件

代码如下:

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 的代码才能做某事。

【问题讨论】:

  • 尝试使用 authButton.setChangeListener(null) 之类的代码进行打包 - 只是为了确保不是对 FieldChangeListener 的引用导致了麻烦
  • 我在其他类的其他地方有字段更改侦听器,它们构建和打包都很好。
  • 过去曾问过几个类似的问题:stackoverflow.com/questions/7804602/…stackoverflow.com/questions/7291442/… - 都提到 Cannot run program "jar": CreateProcess error=2
  • 我已经看过这两个了,但是谢谢。 Blackberry 项目是否有大小上限?
  • @ScottBoettger,我认为有。工具链试图将其分解为几个 COD 文件,当我将程序变小时,我遇到了一些问题。

标签: blackberry java-me twitter-oauth blackberry-eclipse-plugin blackberry-jde


【解决方案1】:

确保您的 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

正如下面的 Scott Boettger 评论中所述,这篇文章也可能会有所帮助: http://supportforums.blackberry.com/t5/Java-Development/why-cause-more-then-100-compiled-classes-packaging-I-O-error/m-p/520282

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多