2

为什么当我使用这样的简单线程时:

Thread t = new Thread(new Runnable() {
public void run(){
while(true){
  .....
 idLabel.setText(Date.toString);
 Thread.sleep(1000);`
}
t.start(); 

我得到了这个错误:

java.lang.IllegalStateException:不在 FX 应用程序线程上;currentThread = Thread-4

但如果我使用输入文本(如 idInputText)而不是标签,我没有错误??

4

1 回答 1

6

JavaFX 的所有 UI 操作都应在 FX 应用程序线程上执行。您正在创建一个Thread t不是 FX 应用程序线程的新线程。因此异常消息:

java.lang.IllegalStateException:不在 FX 应用程序线程上;currentThread = Thread-4

您需要使用Platform#runLater()方法进行此类操作,如下所示:

while(true){
    .....
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            idLabel.setText(Date.toString);
        }
    });
    Thread.sleep(1000);`
}
于 2013-06-15T14:05:21.387 回答