這是一個非常常見的錯誤,因爲有大量關於它的線程,但我不確定是否因爲我的情況與其中的所有解決方案稍有不同,工作?getResourceAsStream在Eclipse IDE中工作,但不在JAR格式中
基本上,我在日食。我有一個名爲src的源文件夾,然後我有一個包裝下來三個文件夾,然後是有問題的類。該班級使用代碼:
BufferedImage im = ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(filenames[x].concat(extension)));
被try/catch包圍。文件名是我加載的所有文件名的數組(這段代碼在for循環中運行多次),擴展名是".PNG"
。這些圖片位於另一個名爲EngineTextures的源文件夾中。
運行此程序在Eclipse中正常工作!所有的紋理加載和我的所有其他代碼運行!但是,我將它作爲可運行的jar導出並在命令提示符下運行,以在它們全部上收到input == null
錯誤,指向其中包含ImageIO.read(Thread.currentThread()
的行。
踢球者是在整個事情之前在一個單獨的項目中工作,當我甚至嘗試重新導出該項目時,我在完全不變的代碼上收到相同的錯誤。這導致我相信我有一些模糊的Eclipse設置發生了錯誤的改變。
打開罐子,我的MANIFEST.MF有一個版本的1.0
和只是普通.
類路徑,我認爲是對這種事情是否正確? Main-Class指向正確的地方,我所有的照片都在META-INF文件夾旁邊。
解決方案我已經看了失敗:
getResourceAsStream working in eclipse, but not when run as applet in browser
Why does getResourceAsStream() work in the IDE but not the JAR?
Java IDE - Eclipse, Importing resources
Audio file in jar made by Eclipse IDE
getResourceAsStream() returning null in jar but fine in eclipse
此外,我完全刪除了工作區,並將我的圖片和代碼重新複製到了同一個狀態,因此可能某些.metadata事情是錯誤的,無濟於事。
非常感謝您的幫助。我不喜歡這樣重複,但迄今爲止還沒有解決方案。如果我沒有提供任何重要信息,請告訴我。
如何指定文件名?如果你輸入一個日誌語句,那麼'filenames [x] .concat(extension)'的結果是什麼? –
這段代碼在'loadTextureSet(String [] f)'方法中,擴展名是該類的靜態最後一個。因此,我用[],它被設置八九不離十一個String主調用它想:'一個String = {「按鈕」,「背景」};「'等 – snickers10m
正如我所說,這是一個循環,所以如果設置了'字符串[] F = { 「紋理A」, 「紋理B」, 「紋理C」, 「紋理d」}'然後一個println將熄'紋理A.PNG''紋理B.PNG''紋理C.PNG' '紋理D.PNG'。 – snickers10m