JavaFX - 从其他线程更新标签值
JavaFX - update label values from other thread
大家好!
我是 JavaFX 的新手。我正在编写模拟打印机工作的非常小的应用程序。模拟是在称为 PrintingProcess 的特殊线程上进行的 运行(此进程只做一件事 - 等待给定时间,然后递增计数器)。我需要将此值发送到 window,其中标签应显示有多少页 "printed"。有什么办法吗?到目前为止,我写了小单例 class 来保持价值。
[edit] 我用任务解决了 :) 谢谢你的帮助
Platform.runLater(new Runnable() {
@Override public void run() {
textLabel.setText(yourValue);
}
});
上面的例子很简单。您尽快向 JavaFX 请求一个可运行的。我不知道它究竟是如何工作的,但这是从非 JavaFX 线程更改 UI 组件的方法。
您可以将 textLabel 变量传递给具有自定义 class 或新匿名线程的任何线程。
编辑:
我发现 Dici 的回答更适合您的应用。我不建议将这段代码放在任何循环中,因为你可能仍然会使用它。
您应该使用 Task.updateProgress 方法。调用它来指定当前打印页面的百分比。覆盖 Task.call
以在另一个线程中执行需要 运行 的操作。此方法 永远不应操作 JavaFX 组件 。然后,您可以改写 Task.succeeded
等方法,以在打印作业结束时实现 UI 的行为。查看此 class 的文档以充分利用它。
大家好! 我是 JavaFX 的新手。我正在编写模拟打印机工作的非常小的应用程序。模拟是在称为 PrintingProcess 的特殊线程上进行的 运行(此进程只做一件事 - 等待给定时间,然后递增计数器)。我需要将此值发送到 window,其中标签应显示有多少页 "printed"。有什么办法吗?到目前为止,我写了小单例 class 来保持价值。
[edit] 我用任务解决了 :) 谢谢你的帮助
Platform.runLater(new Runnable() {
@Override public void run() {
textLabel.setText(yourValue);
}
});
上面的例子很简单。您尽快向 JavaFX 请求一个可运行的。我不知道它究竟是如何工作的,但这是从非 JavaFX 线程更改 UI 组件的方法。
您可以将 textLabel 变量传递给具有自定义 class 或新匿名线程的任何线程。
编辑: 我发现 Dici 的回答更适合您的应用。我不建议将这段代码放在任何循环中,因为你可能仍然会使用它。
您应该使用 Task.updateProgress 方法。调用它来指定当前打印页面的百分比。覆盖 Task.call
以在另一个线程中执行需要 运行 的操作。此方法 永远不应操作 JavaFX 组件 。然后,您可以改写 Task.succeeded
等方法,以在打印作业结束时实现 UI 的行为。查看此 class 的文档以充分利用它。