gpt4 book ai didi

java - 如何将 fxml 加载器的位置设置为另一个包中的 fxml

转载 作者:行者123 更新时间:2023-12-02 02:05:47 26 4
gpt4 key购买 nike

我正在尝试制作一个具有用于制作新项目的对话框的应用程序。我已经对其进行了编程,但想要清理文件结构,因此我将对话框及其 Controller 的 fxml 移至它们自己的包中。该对话框的文件位于名为 newItemDialog 的包中。当我尝试启动它时,出现 java.lang.IllegalStateException: Location is not set 错误。我已经尝试过 how to locate fxml from another package? 的解决方案

这是我的项目文件结构的图片: Project File Structure

这是启动对话框的代码

@FXML
public void showNewItemDialog() {
Debug.getInstance().log("Entering showNewItemDialog method", false);
Dialog<ButtonType> dialog = new Dialog<>();
dialog.initOwner(mainBorderPane.getScene().getWindow());
dialog.setTitle("Create new item");
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("/newItemDialog/newToDoItem.fxml"));
try {
dialog.getDialogPane().setContent(fxmlLoader.load());
} catch(IOException e) {
Debug.getInstance().log("An error has occurred in the showNewItemDialog method\n", true);
e.printStackTrace();
return;
}

dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);

Optional<ButtonType> result = dialog.showAndWait();
if(result.isPresent() && result.get() == ButtonType.OK) {
Debug.getInstance().log("Updating ListView", false);
NewItemDialogController controller = fxmlLoader.getController();
ToDoItem newItem = controller.processResults();
toDoListView.getSelectionModel().select(newItem);
}
}

谢谢!

最佳答案

在大多数情况下,.fxml 文件的路径设置不正确。您可以尝试设置正确的路径,例如:

1。使用绝对路径:

FXMLLoader loader = new  XMLLoader(getClass().getResource("/com/vincent/todo/newItemDialog/newToDoItem.fxml"));

2。使用相对路径:

FXMLLoader loader = new  XMLLoader(getClass().getResource("newItemDialog/newToDoItem.fxml"));

3.使用同一包中的类:

FXMLLoader loader = new  XMLLoader(NewItemDialogController.class.getResource("newToDoItem.fxml"));

关于java - 如何将 fxml 加载器的位置设置为另一个包中的 fxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com