【问题标题】:JavaFX: Worker Thread needs JavaFX App Thread to proceed [duplicate]JavaFX:工作线程需要JavaFX App Thread才能继续[重复]
【发布时间】:2015-04-27 00:58:16
【问题描述】:

工作线程用于处理非常长时间运行的任务。在任务执行的中间,需要用户交互来获取输入。随着输入的提供,工作线程将恢复执行。我的问题是,工作线程需要暂停,获取输入(我们应该通过对话框说 - 我正在使用 JDK8u40 的 Dialogs API,它必须由 JavaFX 应用程序线程提供便利),然后恢复。由于某些情况的依赖性,一开始没有提供输入,并且可能需要多次输入。

一个典型的例子是,文件从一个目录复制到另一个目录。当文件被复制时,目标目录中存在同名文件,因此需要用户交互来重命名文件或跳过文件复制以避免文件名冲突。在这种情况下,工作线程应该执行文件复制,并且需要暂停以获取用户的输入(必须由 JavaFX 应用程序线程提供便利)才能继续。 Platform.runlater(() -> {});不能做这种情况,因为它只会让 Runnable 对象在未来某个时间运行。

如何促进这种情况?我是 JavaFX 并发的新手。

【问题讨论】:

    标签: java multithreading concurrency javafx


    【解决方案1】:

    您可以使用此处所述的等待通知机制:http://www.avajava.com/tutorials/lessons/how-do-i-use-the-wait-and-notify-methods.html。 当需要交互时,会通过 ui 线程启动 runnable 以提示用户。工作线程调用等待。 ui 线程最终获得用户输入并根据收到的消息通知工作线程继续其工作。这里的区别是不需要创建两个线程,因为 ui 线程已经存在。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多