2013-08-05 86 views
2

這是一個非常常見的錯誤,因爲有大量關於它的線程,但我不確定是否因爲我的情況與其中的所有解決方案稍有不同,工作?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事情是錯誤的,無濟於事。

非常感謝您的幫助。我不喜歡這樣重複,但迄今爲止還沒有解決方案。如果我沒有提供任何重要信息,請告訴我。

+0

如何指定文件名?如果你輸入一個日誌語句,那麼'filenames [x] .concat(extension)'的結果是什麼? –

+0

這段代碼在'loadTextureSet(String [] f)'方法中,擴展名是該類的靜態最後一個。因此,我用[],它被設置八九不離十一個String主調用它想:'一個String = {「按鈕」,「背景」};「'等 – snickers10m

+0

正如我所說,這是一個循環,所以如果設置了'字符串[] F = { 「紋理A」, 「紋理B」, 「紋理C」, 「紋理d」}'然後一個println將熄'紋理A.PNG''紋理B.PNG''紋理C.PNG' '紋理D.PNG'。 – snickers10m

回答

1

打開罐子,我已經MANIFEST.MF和1.0版本只是簡單。一個類路徑,我認爲是對這種事情是否正確?

第一個JAR文件名其他JAR文件,相對於這個jar文件的位置的類路徑條目。它沒有名字的目錄:

"The value of this attribute specifies the relative URLs of the extensions or libraries that this application or extension needs."

這反過來又意味着,通過getResourceAsStream()加載資源必須在JAR文件。

+0

謝謝您的研究。 在這種情況下, ,如果我把我的照片打包在另一個jar文件中的同一個文件夾中,那麼我的理解就是這樣呢?這樣做不會,在我的測試中。 是否有任何其他的方式來加載更有效然後圖像文件?一種可以在jar格式和eclipse中工作的方法?我寧願從代碼中運行相同的罐子訪問圖像。 – snickers10m

+0

我的是這個方法在不同的項目之前......我簡直複製'的getResourceAsStream()'和它從該項目其餘的工作是什麼樹樁,現在即使那個被導出的項目也不行。 – snickers10m

+0

您需要修復您的Class-Path來命名其他JAR文件。 – EJP

相關問題