在线程中设置标签会导致IllegalStateException

时间:2012-10-18 17:34:32

标签: multithreading blackberry java-me illegalstateexception

我有一个类似的线程:

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

UiApplication.getUiApplication().invokeLater(new Runnable() {
    public void run() {
        label_up_result.setText(result);
    }
});

答案 1 :(得分:-2)

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