我遇到了问题,我正在做一个模拟FCFS算法的程序。我正在使用线程。问题是当我按T时程序需要中断线程并显示一个带有表的窗口(阶段),当我关闭阶段时我需要再次启动线程,所以我的想法是从第二个控制器调用其他控制器的功能然后关闭舞台 这是我称之为第二阶段的地方:
case T:
banderaPause=true;
th.interrupt();
Stage stTableView = new Stage();
FXMLLoader loader = new FXMLLoader();
Pane root = null;
try {
root = loader.load(getClass().getResource("showTable.fxml").openStream());
showTableController stController = (showTableController)loader.getController();
stController.init(arreglo);
stTableView.setTitle("Programa 4");
stTableView.setScene(new Scene(root, 950, 375));
stTableView.setX(2.00);
stTableView.setY(300.00);
stTableView.show();
stTableView.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println("ya cerre");
}
});
} catch (IOException e1) {
e1.printStackTrace();
}
break;
这是我试图从第二个控制器调用该方法的地方:
case C:
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("second.fxml"));
Parent root = loader.load();
Controller n = loader.getController();
n.Continua();
Stage stage = (Stage) closeButton.getScene().getWindow();
stage.close();
} catch (IOException e1) {
e1.printStackTrace();
}
break;
但是舞台刚刚结束,方法从未被称为
答案 0 :(得分:1)
来自javadoc for onCloseRequested
(强调我的):
当有外部请求关闭此窗口时调用。
因此,如果您自己致电close
,则不会执行处理程序。
对于不是主要阶段的Stage
,有一个等待窗口关闭的选项,但是:Stage.showAndWait
,所以你可以使用它来代替注册事件处理程序: / p>
stTableView.showAndWait();
// Print to console after stage is closed
System.out.println("ya cerre");