我有一个类似的线程:
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);
可能是什么问题?我该如何解决?
答案 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