JavaFx2 IllegalStateException 与 Label.setText

标签 java thread-safety javafx-2

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

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

我收到此错误:

java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4

但是如果我使用输入文本(如 idInputText)而不是标签,我就不会出现错误?

最佳答案

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

java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4

您需要使用Platform#runLater()此类操作的方法如下:

while(true){
    .....
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            idLabel.setText(Date.toString);
        }
    });
    Thread.sleep(1000);`
}

关于JavaFx2 IllegalStateException 与 Label.setText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17124442/

相关文章:

java - 计划中的 TWSz Java API 重启和 restartAndCleanUp 作业

java - ORMLite - 如何创建对象并填充外部集合?

c++ - QString 的隐式共享实现如何线程安全?

java - 调整已完成事件的大小?

select - JavaFX 2中的组合框选择项

JavaFx无法获取相对于场景的节点坐标

java - 扩展 Jenkins/Hudson 插件以设置环境变量对

java - 如何在JSP中使用d3.js?

swift - 更新从后台线程更改 UI 的变量 - SWIFTUI

java - 这段代码是否解决了 Java 中的双重检查锁定问题?