2013-08-22 63 views
2

我的程序使用Image.class,它可以幫助我接收圖像。java中的絕對/相對路徑(jar,ide)

Image img = new ImageIcon("Shooter2D/res/background.jpg").getImage();

當程序從開發環境中運行 - 一切正常,編譯一個jar文件後 - 不工作。 告訴我如何正確設置在IDE(Intellij IDEA)和歸檔中工作的路徑。 Shooter2D.jar包含:

- META-INF 
Manifest-Version: 1.0 
Main-Class: Shooter2Dv22082013.Main 
- res 
all pictures 
- Shooter2Dv22082013 
all .class files, main is Main.class 

指示圖:http://imageshack.us/photo/my-images/801/eyjv.png/

+0

嘗試用它作爲資源:[鏈接](http://stackoverflow.com/questions/6845231/how-to-correctly -get-image-from-resources-folder-in-netbeans) – ahmedalkaff

回答

3

這裏是the javadoc說,有關的ImageIcon的構造函數:

從指定文件一個ImageIcon。圖像將通過使用MediaTracker來預加載以監視圖像的加載狀態。指定的字符串可以是文件名稱文件路徑

(重點煤礦)

圖像不是存儲在一個文件中。它不在你的文件系統中。它位於classpath中的jar中。這就是你想從中加載它的地方。無論你的應用程序的jar文件在最終用戶的機器上,你的程序都想從這個jar文件中加載它。這個jar文件中的所有資源都可以從ClassLoader中獲得。

所以,你應該用

new ImageIcon(MyClass.class.getResource("/res/background.jpg")) 

new ImageIcon(MyClass.class.getClassLoader().getResource("res/background.jpg")) 
+0

不確定,但我認爲你應該在第二個路徑的開頭添加一個'/'。 –

+0

我說,'告訴我如何正確設置在IDE(IntelliJ IDEA的)工作的路徑和archive.' 如果我使用.getResource,那麼我不能運行我的IDE(IDEA)的應用程序 它拋出例外:NullPointerException – Eldar

+0

@ArnaudDenoyelle:我確定它不需要一個。 –