【发布时间】:2014-11-04 09:52:25
【问题描述】:
我正在创建我的第一个 JavaFX 应用程序,到目前为止一切正常。我只是遇到一个问题。
为了显示和加载 FXML 文件,我使用 StackOverflow 上的 VistaNavigator 类:
public static void loadVista(String fxml) {
try {
mainController.setVista(
FXMLLoader.load(
VistaNavigator.class.getResource(
fxml
)
)
);
} catch (IOException e) {
e.printStackTrace();
}
}
我有一个 ScanController,它接收来自键盘的输入并根据该输入检查票证 ID。当票证正常时,它加载“scan-success.fxml”,否则加载“scan-failure.xml”,这些 FXML 文件中的每一个都有自己的控制器。我正在像这样加载成功的 FXML:
VistaNavigator.loadVista(VistaNavigator.VISTA_SCAN_SUCCESS);
这很好用。 Success-FXML 页面正在显示并且 ScanSuccessController 正在加载。在 ScanSuccessController.java 的 initialize() 方法中,我有以下代码 sn-p:
try {
Thread.sleep(2000); //1000 milliseconds is one second.
VistaNavigator.loadVista(VistaNavigator.VISTA_SCAN_HOME);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
所以我想显示成功页面大约 2 秒,然后返回主屏幕(scan-home.fxml 和控制器 ScanHomeController.java)扫描更多票证。然而,当执行这段代码时,什么都没有发生,没有异常,也没有 FXML 文件的变化。
当我在单击按钮(在 EventHandler 中)后尝试加载新的 vista 时,效果很好。
我可以想象,JavaFX 在控制器完全初始化之前无法加载新的 FXML 文件,但无法确定将这行代码放在哪里..
我希望有人可以帮助我解决这个问题。
【问题讨论】:
标签: java controller javafx fxml