Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待Swing对话框结果时在JavaFX中阻塞_Java_Swing_Javafx - Fatal编程技术网

等待Swing对话框结果时在JavaFX中阻塞

等待Swing对话框结果时在JavaFX中阻塞,java,swing,javafx,Java,Swing,Javafx,背景 我有一个Swing应用程序。我运行嵌入在swing应用程序中的JavaFx。我在JavaFx应用程序中运行web浏览器webview。我添加了一个处理程序来接收web浏览器的确认功能。此处理程序在JavaFx事件线程中调用。该处理程序是同步的,并将布尔值返回给webview 问题 要向用户打开Swing对话框,我需要在Swing事件线程上运行,但只能在对话框响应后从JavaFx回调返回 下面是我的回调示例 engine.setConfirmHandler(()->{ // in

背景

我有一个Swing应用程序。我运行嵌入在swing应用程序中的JavaFx。我在JavaFx应用程序中运行web浏览器webview。我添加了一个处理程序来接收web浏览器的确认功能。此处理程序在JavaFx事件线程中调用。该处理程序是同步的,并将布尔值返回给webview

问题

要向用户打开Swing对话框,我需要在Swing事件线程上运行,但只能在对话框响应后从JavaFx回调返回

下面是我的回调示例

engine.setConfirmHandler(()->{
   // in JavaFX context
   CountdownLatch latch = new CountdownLatch(1);

   SwingUtilities.invokeLater(()->{
      // in Swing context
      showModalDialog();
      latch.countDown();
   });

   // Wait for latch
   // HOW DO I BLOCK HERE AND STILL PROCESS EVENTS IN JAVAFX/SWING?
   return result;
});
问题:


在JavaFX或Swing上下文中不阻止UI事件的情况下,如何延迟回调返回,直到对话框关闭?

JavaFX有一种在处理事件时阻止的方法

爪哇8

Toolkit.getToolkit().enterNestedEventLoop(key)
Toolkit.getToolkit().exitNestedEventLoop(key, result)
爪哇9

Platform.enterNestedEventLoop(key)
Platform.exitNestedEventLoop(key, result)
然后,另一个线程可以退出estedeventloop以解除阻止,作为奖励,还可以返回一个值

爪哇8

Toolkit.getToolkit().enterNestedEventLoop(key)
Toolkit.getToolkit().exitNestedEventLoop(key, result)
爪哇9

Platform.enterNestedEventLoop(key)
Platform.exitNestedEventLoop(key, result)
但是,当从Swing调用exitNestedEventLoop时,必须切换回JavaFX上下文

下面是Java8的工作示例


我想我有一个想法,但能否描述一下您的问题?请提供更多详细信息?您可以使用SwingWorker,并以其done方法或附加到worker的PropertyChangeListener响应回调,监听SwingWorker.StateValue.Done的请提供一个用纯java/fx演示问题的示例,否则我就出局了;代码片段不够好,它们缺少上下文-请按照帮助页面的建议操作..范围将在您的文档中显示。请向我们展示这一点;它们现在是javafx.application.Platform类的一部分,以防您更改Java版本。