我正在使用以下來獲取此特定文件的URL,但它返回null。有沒有人有任何關於這個問題的建議或另一種方式來做到這一點?Java - class.getResource返回null
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
我正在使用以下來獲取此特定文件的URL,但它返回null。有沒有人有任何關於這個問題的建議或另一種方式來做到這一點?Java - class.getResource返回null
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
不,這是正確的方法afaik。確保資源在您的類路徑中。這通常是這些類型問題的原因。
該路徑是相對於classpath根目錄的,如果你沒有給出絕對路徑,它將與你正在使用的類(在本例中爲ExchangeInterceptor
)在同一個包中查找。要找到根中使用的東西,請使用/GeoIP.dat
。
你把這個GeoIP.dat放在哪裏?在與ExchangeInterceptor相同的包中,或在「根」包中。如果在同一個包中,你的代碼是OK的,如果在根目錄下 - 添加'/'前綴。
也許您正在使用M2Eclipse?如果配置不正確,也可能導致此類問題。這樣的問題的另一個原因可能是:錯誤配置的類加載器,配置錯誤的OSGi,...
萬一有人仍然有問題,要明白:
.getResource()授予您訪問本地bin文件夾。這意味着,您的資源需要位於YourProject/bin/package /中。根文件夾是YourProject/bin /,可以通過在字符串參數中添加前綴/來加以識別,就像iirekm所說的那樣。
首先,您需要確保您在正確的路徑上訪問正確的文件。你可以通過getClass()。getResource(「GeoIP.dat」)。getAbsolutePath()來驗證。
其次,路徑說明符區分大小寫,所以請確保您的文件未被命名爲「geoIP.dat」或「GeoIP.DAT」。
你會得到NullRef,因爲`getResource`返回`null`,請記住? – Schultz9999 2015-01-05 21:58:09
對於那些使用Intellij Idea:檢查設置 - >編譯器 - >資源模式。
該設置包含應解釋爲資源的所有擴展名。如果擴展不符合這裏的任何模式,那麼class.getResource將爲使用此擴展的資源返回null。
我一直在使用IDEA超過10年,甚至從來不知道這個設置。謝謝! – 2014-01-21 17:28:35
的文件需要在類路徑,例如: -
斌/我的/包/ GeoIP.dat
的/前綴似乎是一個謊言。以下將起作用。
URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat");
我懷疑問題是你沒有在類路徑中的文件。
使用類ClassLoader
URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");
的getResource
方法在蝕的情況下。
只是一個提示。你的代碼可能是正確的,但你的jre配置不是。我遇到了同樣的錯誤,沒有任何幫助,直到我檢查了日食設置。
請確保您正確設置了執行環境。
Preferences -> Java -> Installed JREs -> use "jdk..." as compatible JRE
雖然使用的是IntelliJ,我生成該項目作爲一個JavaFX應用程序,然後添加Maven的框架支持它。事實證明,我將資源置於src/main/resources
,並且必須在代碼中使用它們的每個資源名稱後面添加./
。
也如前面的答案中所述,只有通過classLoader加載資源才起作用。
所以對我來說,最終的URL裝載用做:
URL url = getClass().getClassLoader().getResource(String.format(".%ssample.fxml", File.separatorChar));
的File.separatorChar
回報/
在* nix和\
在Windows上。
如果您使用搖籃和IntelliJ,和改變Resource patterns
沒有工作,和你的資源的根設置是否正確......你可以試試這個:
Settings > Build, Execution, Delpoyment > Build Tools > Gradle > Runner > Delegate IDE build/run actions to gradle
。 (IntelliJ 2017.3.3)
來源:https://youtrack.jetbrains.com/issue/IDEA-176738#comment=27-2518612
這真的是答案。其他一切只是有點荒謬。除了IntelliJ提示。 – Schultz9999 2015-01-05 21:57:30