Java 如何设置fxml加载程序&x27;s位置到另一个包中的fxml

Java 如何设置fxml加载程序&x27;s位置到另一个包中的fxml,java,fxml,Java,Fxml,我正在尝试制作一个应用程序,它有一个用于制作新项目的对话框。我已经对它进行了编程,但想清理文件结构,所以我将对话框及其控制器的fxml移到了它们自己的包中。对话框的文件位于名为newItemDialog的包中。当我尝试启动它时,我得到一个java.lang.IllegalStateException:Location not set错误。我已经试过了 以下是我的项目文件结构的图片: 下面是启动对话框的代码 @FXML public void showNewItemDialog() {

我正在尝试制作一个应用程序,它有一个用于制作新项目的对话框。我已经对它进行了编程,但想清理文件结构,所以我将对话框及其控制器的fxml移到了它们自己的包中。对话框的文件位于名为newItemDialog的包中。当我尝试启动它时,我得到一个java.lang.IllegalStateException:Location not set错误。我已经试过了

以下是我的项目文件结构的图片:

下面是启动对话框的代码

@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
public void showNewItemDialog(){
Debug.getInstance().log(“输入showNewItemDialog方法”,false);
Dialog=新建Dialog();
initOwner(mainBorderPane.getScene().getWindow());
对话框.setTitle(“创建新项”);
FXMLLoader FXMLLoader=新的FXMLLoader();
setLocation(getClass().getResource(“/newItemDialog/newToDoItem.fxml”);
试一试{
dialog.getDialogPane().setContent(fxmloader.load());
}捕获(IOE异常){
Debug.getInstance().log(“showNewItemDialog方法中发生错误,\n”,true);
e、 printStackTrace();
返回;
}
dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
可选结果=dialog.showAndWait();
if(result.isPresent()&&result.get()==ButtonType.OK){
Debug.getInstance().log(“更新ListView”,false);
NewItemDialogController=fxmlLoader.getController();
ToDoItem newItem=controller.processResults();
toDoListView.getSelectionModel().select(新建项);
}
}

谢谢

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

一,。使用绝对路径:

二,。使用相对路径:

三,。使用同一包中的类:


您应该使用不带第一斜杠的
getClass().getResource(“newItemDialog/newToDoItem.fxml”)

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