簡體   English   中英

getClass().getResource() 加載文件失敗,File() 有效

[英]File loading by getClass().getResource() fails, File() works

我正在嘗試通過以下代碼段將 css 文件合並到我的 JavaFX 應用程序中:

public void loadExternalCSS() {
      System.out.println("CLASSPATH: "+System.getProperty("java.class.path"));
      try{
        skinCSS = getClass().getResource("css/default_skin.css").toExternalForm();
      }
      catch(Exception e){
          System.err.println("Exception: " + e);
          e.printStackTrace(System.err);
      }
}

在運行時產生:

java.lang.NullPointerException
    at 
robotikosanomologitos.RobotikosAnomologitos.loadExternalCSS(RobotikosAnomologitos.java:529)
    at robotikosanomologitos.RobotikosAnomologitos.start(RobotikosAnomologitos.java:491)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)

奇怪的是,在這個函數的上面幾行,我有一個從properties文件中讀取的小函數。

public void readPropertiesFile() {
        Properties props = new Properties();
        InputStream is;
        try {
            File f = new File("properties");
            is = new FileInputStream(f);
        }
        /* etcetera */
}

這就像一個魅力。 properties文件位於項目目錄的根目錄, C:\\~my_projects_folder~\\RobotikosAnomologitos

在四處尋找解決方案后,我看到getClass().getResource()嘗試在類路徑中查找資源。 我嘗試在每次運行時打印類路徑,我得到: RobotikosAnomologitos\\dist\\run125323585\\RobotikosAnomologitos.jar ,這是合乎邏輯的。

但是,在運行程序時查看此臨時文件夾后,我找不到 css 文件夾和 css 文件。

但該文件確實位於我的工作項目目錄中,位於RobotikosAnomologitos\\css\\default_skin.css 出於某種原因,它在運行時沒有出現在類路徑中,導致getResource()在查找時返回 null。

關於如何包含它的任何想法?


編輯:我忘了提到我還在src包下放置了css/default_skin.css ,並顯示在 Netbeans 的包樹( src/css/default_skin.css )中。

同樣,我有一些位於src/graphics/下的src/graphics/ ,它們可以通過getClass().getResourceAsStream()加載。 這也讓我感到困惑,為什么找不到 css 文件。 也許它沒有在jar編譯?

如果您為一個類調用getResource()並且不預先添加/ ,則該路徑被視為相對於該類的包。

如果您已將資源正確添加到類路徑,則應該可以:

 skinCSS = getClass().getResource("/css/default_skin.css").toExternalForm();

如果要使用getClass().getResource("css/default_skin.css").toExternalForm();檢索,則需要在classpath添加css文件夾getClass().getResource("css/default_skin.css").toExternalForm();

檢查您是否沒有使用 CSS 文件的二進制編碼(請參閱項目屬性>打包)。 如果您正在使用,提到的文件擴展名應該是“.bss”。

暫無
暫無

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

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