即使文件路径正确,也不会加载FXML文件

时间:2015-06-18 18:50:07

标签: java eclipse javafx

我正在尝试加载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

我必须做一些小事我做错了。

1 个答案:

答案 0 :(得分:1)

此处的问题是,当您使用ClassLoadergetResource()时,您正在追加/

你不应该在ClassLoader路径的开头使用/,因为所有ClassLoader paths are absolute

您绝对可以将ClassgetResource()与以/开头的网址一起使用,因为在将其委托给类加载器之前,它会创建一个绝对网址。

来自JavaDocs:

  

在委托之前,使用此算法从给定的资源名称构造绝对资源名称:

     
      
  • 如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
  •   

以下是有效的网址:

使用ClassLoader:

URL url = getClass().getClassLoader().getResource("frontEnd/fxml/ModeScreen.fxml");

使用Class:

URL url = getClass().getResource("/frontEnd/fxml/ModeScreen.fxml");