我正在尝试加载FXML文件:
URL url = getClass().getClassLoader().getResource("/frontEnd/fxml/ModeScreen.fxml");
try {
this.value = FXMLLoader.load(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是当我跑步时,我得到:
NullPointerException: Location is required
我的fxml文件的路径是:
src/frontEnd/fxml/ModeScreen.fxml
和我的类文件的路径是:
src/frontEnd/ModeScreen.java
this.value extends AnchorPane
和FXML文件的root是一个AnchorPane。
我检查并确保所有这些文件都在bin文件夹中,并且它不能在jar文件或Eclipse中运行
我也试过使用以下路径:
frontEnd/fxml/ModeScreen.fxml
../frontEnd/fxml/ModeScreen.fxml
src/frontEnd/fxml/ModeScreen.fxml
/src/frontEnd/fxml/ModeScreen.fxml
/fxml/ModeScreen.fxml
fxml/ModeScreen.fxml
我也尝试过使用getResourceAsStream.toString
文件结构如下:
bin
application
Main
frontEnd
controllers
fxml<---<all the fxml files are in here. I checked too.>
ModeScreen.class
我必须做一些小事我做错了。
答案 0 :(得分:1)
此处的问题是,当您使用ClassLoader
的getResource()
时,您正在追加/
。
你不应该在ClassLoader路径的开头使用/
,因为所有ClassLoader paths are absolute
。
您绝对可以将Class
的getResource()
与以/
开头的网址一起使用,因为在将其委托给类加载器之前,它会创建一个绝对网址。
来自JavaDocs:
在委托之前,使用此算法从给定的资源名称构造绝对资源名称:
- 如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
以下是有效的网址:
使用ClassLoader:
URL url = getClass().getClassLoader().getResource("frontEnd/fxml/ModeScreen.fxml");
使用Class:
URL url = getClass().getResource("/frontEnd/fxml/ModeScreen.fxml");