[英]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.