2013-04-04 53 views
0

我的程序在Eclipse中完美運行,但是當我輸出它時,圖像不顯示。圖像沒有顯示在罐子裏

我的設置是這樣

src 
..gui 
....Main.java 
....menus 
......MenuMain.java 
res 
...Logo.png 

我從MenuMain.java refence Logo.png,我試過很多方法;

  • res/Logo.png
  • /res/Logo.png
  • .res/Logo.png
  • ../../Logo.png
  • ++++

前3者在Eclipse中工作,但在罐既不作品。我檢查了jar文件,res文件夾在那裏,所有的圖像也是如此。我也嘗試編輯MANIFEST.MF並添加類路徑:

但它仍然無法正常工作。我沒有得到任何錯誤,當運行JAR,其他一切都顯示文件(按鈕,標籤,++)

編輯: 我用這是JPanel與GridBagLayout,我添加一個ImageIcon JLabel能夠將它添加到JPanel。本來我以前是這樣的:

JLabel logo = new JLabel(new ImageIcon("res/Logo.png")); 

但我也試過像其他變化:

JLabel logo = new JLabel(new ImageIcon(MenuMain.class.getClassLoader().getResource("/res/Logo.png"))); 

而且還通過getResourceAsStream()

在Eclipse中只有第一個作品,但不顯示在罐子裏。其他人只是崩潰(空指針)

+0

是這樣搖擺?你能發佈與閱讀/渲染圖像相關的代碼片段嗎? – asgs 2013-04-04 17:59:56

+0

從jar中運行時,通常需要將src文件夾的編譯內容和res文件夾的所有內容放在一起。然後你只需從類路徑加載。 – 2013-04-04 18:00:04

+0

@asgs在主要帖子中增加了更多信息 – Limon 2013-04-04 18:22:50

回答

0

您需要包括Logo.png在你的罐子,並使用ClassLoader.getResourceAsStream()

一般模式的類路徑中加載資源:

... 
InputStream resource = className.class.getResourceAsStream("/res/Logo.png"); 
Image image = ImageIO.read(resource); 
// do your display stuff here... 
... 
+0

我在我的罐子裏有Logo.png。我也試過至少10個變種的代碼,但後來我不能在eclipse中運行(沒有嘗試導出它,所以我不知道它是否有效)。 – Limon 2013-04-04 18:07:10

+0

好的,然後使用'getResourceAsStream()'而不是'FileInputStream'。 – PaulProgrammer 2013-04-04 18:07:59

+0

InputStream resource = MenuMain.class.getResourceAsStream(「/ res/Logo.png」); \t \t JLabel logo = new JLabel(); \t \t嘗試{ \t \t \t logo = new JLabel(new ImageIcon(ImageIO.read(resource))); \t \t} catch(IOException e){e。的printStackTrace(); } 在線程「main」中給出異常java.lang.IllegalArgumentException:input == null! – Limon 2013-04-04 18:11:14