JavaFX:Worker Thread 需要 JavaFX App Thread 才能继续

JavaFX: Worker Thread needs JavaFX App Thread to proceed

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

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

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

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