Maven JavaFX项目无法使用GetResource查找FXML文件?

时间:2018-06-18 02:55:21

标签: java maven javafx

我在Netbeans中有一个标准(非JavaFX)Maven Java项目。它应该做的第一件事是加载.fxml文件,但我似乎无法使用getClass().getResource()找到它。

这很不寻常,因为这个项目是从一个标准的Java项目中导入的,它运行得很好,没有错误。

这是主要方法:

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage stage) throws Exception {
    Main_PanelController controller = new Main_PanelController(this);
    FXMLLoader loader = new FXMLLoader(getClass().getResource("Main_Panel.fxml"));
    loader.setController(controller);
    URL url = getClass().getResource("Main_Panel.fxml");
    System.out.println("URL: " + url);
    System.exit(0);
    Parent root = loader.load();
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.getIcons().add(new Image(new FileInputStream(Paths.get("Pictures", "SBU Emblem.png").toFile())));
    stage.setAlwaysOnTop(true);
    stage.setTitle("Simple Knisley Citation Tool α 0.5");
    stage.setResizable(false);
    stage.show();
}

网址始终显示为null

&安培;文件层次结构:

Hierarchy

我有System.out.println作为测试方法,以查看URL对象是否返回null。根据我读过getClass().getResource()的所有内容,它应该在与调用类相同的包中获取任何对象,Main_Panel.fxml是。

使用命令target

运行Clean & Build后,jar tf Simple-Knisley-0.5-Alpha-jackofall.jar文件夹中的Jar文件结构
META-INF/
META-INF/MANIFEST.MF
com/
com/protonmail/
com/protonmail/sarahszabo/
com/protonmail/sarahszabo/simpleknisley/
com/protonmail/sarahszabo/simpleknisley/core/
com/protonmail/sarahszabo/simpleknisley/core/CitationDiskManager.class
com/protonmail/sarahszabo/simpleknisley/core/Main_PanelController.class
com/protonmail/sarahszabo/simpleknisley/core/CitationGenerator$GeneratorType.class
com/protonmail/sarahszabo/simpleknisley/core/CitationGenerator.class
com/protonmail/sarahszabo/simpleknisley/core/Main.class
.netbeans_automatic_build
META-INF/maven/
META-INF/maven/com.protonmail.sarahszabo.simpleknisley/
META-INF/maven/com.protonmail.sarahszabo.simpleknisley/Simple-Knisley/
META-INF/maven/com.protonmail.sarahszabo.simpleknisley/Simple-Knisley/pom.xml
META-INF/maven/com.protonmail.sarahszabo.simpleknisley/Simple-Knisley/pom.properties

我在Kubuntu 18.04 Bionic Beaver上的Netbeans 8.2上使用Java 8_171

1 个答案:

答案 0 :(得分:2)

这里有一些问题。

  1. Maven希望(默认情况下)资源位于src/main/resources目录中。它默认只复制src/main/java的java文件。请将您的fxml文件移至src/main/resources/com/protonmail/sarahszabo/simpleknisley/core/Main_Panel.fxml

  2. getClass().getResource()希望您提供要加载的资源的完整路径。所以在你的情况下:getClass().getResource("/com/protonmail/sarahszabo/simpleknisley/core/Main_Panel.fxml")

  3. 使用getClass().getClassLoader().getResource()可以指定要加载的资源的位置,作为您调用它的类的相对路径:

    getClass().getClassLoader().getResource("Main_Panel.fxml")