1 回答

TA贡献1869条经验 获得超4个赞
JavaFX 有一种在处理事件的同时进行阻塞的方法。
爪哇 8
Toolkit.getToolkit().enterNestedEventLoop(key)
爪哇 9
Platform.enterNestedEventLoop(key)
然后另一个线程可以exitNestedEventLoop解除阻塞,作为奖励,也可以返回一个值。
爪哇 8
Toolkit.getToolkit().exitNestedEventLoop(key, result)
爪哇 9
Platform.exitNestedEventLoop(key, result)
但是,exitNestedEventLoop从 Swing调用时,您必须切换回 JavaFX 上下文。
所以这是工作示例(Java 8)。
engine.setConfirmHandler(()->{
// in JavaFX context
SwingUtilities.invokeLater(()->{
// in Swing context
boolean result = showModalDialog();
Platform.runLater(()->{
// back to JavaFX context
Toolkit.getToolkit().exitNestedEventLoop(key, result)
})
});
// Wait for result
boolean result = Toolkit.getToolkit().enterNestedEventLoop(this)
// still in JavaFX context
return result;
});
添加回答
举报