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;
});
添加回答
舉報