JavaFX-从其他线程更新标签值

JavaFX-从其他线程更新标签值,java,multithreading,user-interface,javafx,javafx-2,Java,Multithreading,User Interface,Javafx,Javafx 2,大家好! 我是JavaFX新手。我正在写一个模拟打印机工作的小应用程序。模拟在名为PrintingProcess的特殊线程上运行(这个进程只做一件事——等待给定的时间,然后递增计数器)。我需要将这个值发送到窗口,在那个里标签应该显示“打印”了多少页。有什么办法吗?到目前为止,我编写了一个小的单例类来保存值 [编辑]我使用任务解决了它:)谢谢您的帮助 Platform.runLater(new Runnable() { @Override public void run() {

大家好! 我是JavaFX新手。我正在写一个模拟打印机工作的小应用程序。模拟在名为PrintingProcess的特殊线程上运行(这个进程只做一件事——等待给定的时间,然后递增计数器)。我需要将这个值发送到窗口,在那个里标签应该显示“打印”了多少页。有什么办法吗?到目前为止,我编写了一个小的单例类来保存值

[编辑]我使用任务解决了它:)谢谢您的帮助

Platform.runLater(new Runnable() {
    @Override public void run() {
        textLabel.setText(yourValue);
    }
});
上面的例子很简单。您可以尽快向JavaFX请求一个runnable。我不知道它到底是如何工作的,但这是从非JavaFX线程更改UI组件的方法

您可以将textLabel变量传递给具有自定义类或新匿名线程的任何线程

编辑:
我觉得Dici的答案更适合你的申请。我不建议将此代码放入任何循环中,以防您仍然使用它。

您应该使用该方法。调用它以指定当前打印页面的百分比。重写
任务。调用
以执行需要在另一个线程中运行的操作。此方法不应操作JavaFX组件。然后,您可以使用诸如
Task.successed
之类的方法来实现打印作业结束时UI的行为。查看本课程的文档以充分利用它。

向我们展示您所写的内容,以便我们了解您的理解情况,以及您尝试过的内容与未尝试过的内容。关于你的问题,你能提供的任何细节都会很有帮助。这是可行的,但更适合于小任务而不是长时间的工作。对我来说,潜在的大量打印作业应该作为
任务来实现。除此之外,你的建议是有效的。为什么?因为它确保了您的
可运行的
最终将在JavaFX应用程序线程上执行,而不保证何时执行。我同意@Dici是
公共最终版
,您不能覆盖它。嗯,是的,我根据我曾经编写的JavaFX UI的记忆回答。一旦找到正确的重写方法,我就会解决这个问题。谢谢你指出这一点