我正在编写一个javafx程序,我需要创建并使用我自己的基于Stage(Javafx.Stage)的对话框来显示消息和确认。我已经写了所有必要的代码,但我有一个问题:
对话框必须停止执行其余代码,直到给出响应为“是”或“否”或“重试”。当我使用像“DialogBox.ShowMessage”这样的对话框时,会出现一个带有消息和按钮的舞台。但是,正如您所想,其余代码将继续执行。我怎么能绕过这个?当我创建阶段时,它必须停止其他线程或它所依赖的线程。我通过互联网和这里搜索,但我找不到确切的解决方案。一个想法是使用“javafx.event.EventDispatcher”或“javafx.event.EventDispatchChain”,但我无法弄清楚如何使用它们。另一个想法是使用“java.awt.EventQueue”。这里有一些可以提供帮助的东西:我可以控制舞台表演和隐藏事件以及显示或隐藏事件处理程序。我认为som类型的线程队列可以在其中一个特定部分中使用。
我希望我能够充分澄清情况。简而言之,我需要在使用我自己的代码使用另一个阶段时管理线程。
谢谢。
答案 0 :(得分:1)
关于执行暂停,它有一个Jira问题http://javafx-jira.kenai.com/browse/RT-19783
作为一种解决方法,我不知道如何使用EventDispatcher和EventDispatchChain来解决此问题,但您可以将EventHandler
s作为参数发送。例如,
public static void ShowMessage(final EventHandler<ActionEvent> okAction, final EventHandler<ActionEvent> cancelAction){
// Define and add buttons to the "view" and show message
btnOk.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
okAction.handle(null);
}
});
btnCancel.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
cancelAction.handle(null);
}
});
}
并将其用作
DialogBox.ShowMessage(
new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent arg0) {
// Do stuff when "ok" clicked.
},
new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent arg0) {
// Do stuff when "cancel" clicked.
});
我同意这是一种“缠绕”的方式 Siteyehoşgeldinve kolay gelsin。