2012-01-15 108 views
11

我有一個簡單的程序需要顯示圖像。 我知道如何做到這一點從Eclipse運行代碼,我知道如何從JAR文件運行它,但我想要一個適用於這兩種情況的解決方案。從JAR或文件系統加載ImageIcon

Eclipse項目是這樣的:

- Project (java) 
    - src 
    - controller 
     - Main.java 
    - ui 
     - Display.java 
    - images 
    - image.jpg 

的代碼片段是在Eclipse中的工作原理:

ImageIcon image = new ImageIcon("images/image.jpg); 

,對於一個JAR(在一個單一的JAR文件)的工作原理之一:

java.net.URL imgURL = getClass().getResource("/images/image.jpg"); 
ImageIcon image = new ImageIcon(imgURL); 

我需要改變什麼才能得到一個既能在情境中工作的代碼項?

+0

您是否在兩種情況下嘗試了第二次嘗試?那可能只是回答你自己的問題(並且節省你在這裏等待答案的時間)! – 2012-01-15 15:42:19

+2

<水龍頭,水龍頭,水龍頭...>你好?這個麥克風開着嗎? – 2012-01-15 15:50:11

+0

@Hovercraft全是鰻魚。是的,顯然我在兩種情況下都嘗試了兩個代碼片段。 – Martijn 2012-01-15 18:23:12

回答

9

images文件夾中的src文件夾內,然後Eclipse將影像複製到目標文件夾(binclasses,通常情況下),這將提供他們的類路徑,就好像他們是在你的罐子發佈的應用程序版本。

getResource()不看在罐子裏。它看起來在classloader的類路徑中。因此,圖像是否在罐子裏並不重要。它必須在類路徑中。顯然,Eclipse的目標文件夾(通常爲binclasses)在您從Eclipse啓動時位於應用程序的運行時類路徑中。

+0

非常感謝! 把'images'文件夾移到'src'裏的確是解決方案。我的第二個代碼片段在Eclipse和從Jar運行時均保持不變。 – Martijn 2012-01-15 18:24:40