1

我有一个像这样的线程:

    startButton.setChangeListener(new FieldChangeListener() {
        public void fieldChanged(Field arg0, int arg1) {

                    Thread thread = new Thread(){
                        public void run() {
                            uploadFile();
                        }
                    };
                    thread.start();
                }
            //});

    });

uploadFile方法包含label_up_result.setText(result);导致IllegalStateException.

label_up_result定义如下:final LabelField label_up_result=new LabelField("", LabelField.FIELD_LEFT);

可能是什么问题?我该如何解决?

4

2 回答 2

4

问题可能是您正在尝试从工作线程更新 UI。有两种方法。您可以在事件锁上同步:

synchronized(UiApplication.getUiApplication().getEventLock())) {
    label_up_result.setText(result);
}

或者您可以创建一个Runnable在 UI 线程上执行:

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        label_up_result.setText(result);
    }
});
于 2012-10-18T17:40:22.310 回答
-2

我不了解黑莓,但通常您需要在 ui-thread 中执行 ui-actions。SwingUtilities.invokeLater在 JavaSE 中提供该功能,http://www.java2s.com/Code/Java/Swing-JFC/Swinginvokelater.htm

于 2012-10-18T17:39:32.507 回答