簡體   English   中英

即使文件路徑正確,也不會加載FXML文件

[英]FXML file won't load even when file path is correct

我正在嘗試加載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文件的根是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

我一定做錯了一些小事情。

這里的問題是,當您已經在使用ClassLoadergetResource()時,您將附加一個/

您絕對不要在ClassLoader路徑的開頭使用/ ,因為所有ClassLoader paths are absolute

絕對可以將ClassgetResource()與以/開頭的URL一起使用,因為在將其委托給類加載器之前,它會創建一個絕對URL。

從JavaDocs:

在委派之前,使用以下算法從給定資源名稱構造絕對資源名稱:

  • 如果名稱以'/'('\\ u002f')開頭,則資源的絕對名稱是名稱中'/'之后的部分。

以下是有效的網址:

使用ClassLoader:

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

使用類:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM