我在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
。
&安培;文件层次结构:
我有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
答案 0 :(得分:2)
这里有一些问题。
Maven希望(默认情况下)资源位于src/main/resources
目录中。它默认只复制src/main/java
的java文件。请将您的fxml
文件移至src/main/resources/com/protonmail/sarahszabo/simpleknisley/core/Main_Panel.fxml
getClass().getResource()
希望您提供要加载的资源的完整路径。所以在你的情况下:getClass().getResource("/com/protonmail/sarahszabo/simpleknisley/core/Main_Panel.fxml")
使用getClass().getClassLoader().getResource()
可以指定要加载的资源的位置,作为您调用它的类的相对路径:
getClass().getClassLoader().getResource("Main_Panel.fxml")