2016-05-03 20 views
-1

好吧,我已經嘗試了很多來自不同資源的答案,但是我的代碼仍然無法工作。 (我真的不明白它是如何工作的)使用java的jar文件中的緩衝圖像

它是這樣的,包含我的java文件的文件夾位於桌面/代碼 下,並且我有一個名爲package.name的包,其中包含所有圖像的文件夾我試圖加載...

我要使它成爲一個JAR文件,但我的程序總是說文件無法讀取,任何有用的提示,將不勝感激

所以,「形象」是具有文件夾我需要的所有圖片

這是我爲圖像繪製的代碼:

g2.drawImage(getPicture("/package.name/image/"+1+".png"), x, y, 200, 200, null); 

,我有用於緩衝圖像的方法:

public BufferedImage getPicture(String filename) { 
     try { 
      File fp = new File(filename); 
      BufferedImage pic = ImageIO.read(getClass().getResourceAsStream(filename));   
      return pic; 
     } 
     catch (Exception e) { 
      JOptionPane.showMessageDialog(null, "Unable to read file!", "File Error", JOptionPane.ERROR_MESSAGE); 
      return null; 
     } 
    } 

每當我試圖在終端運行它,我的代碼只是輸出消息對話框中,我嘗試它編譯成jar文件,它不工作。

+0

* *什麼是異常類和消息? –

+0

@BrianAgnew異常是這個java.lang.IllegalArgumentException:input == null! –

回答

0

您得到NullPointerException對不對? (我的水晶球說,你這樣做)

你應該沒有點加載圖像.只有斜線/這樣的:

g2.drawImage(getPicture("/your/package/name/image/"+1+".png"), x, y, 200, 200, null);

編輯:你得到IllegalArgumentException不NPE - 這個答案仍然有效原因是一樣的 - nullgetResourcesAsStream()返回。

如果image目錄是在上下文的根,那麼它是在default包,你應該ommit的/your/package/name並只使用image/1.png例如

+0

點是該文件夾的名稱的一部分,我應該刪除/package.name? –

+0

對不起,你是什麼意思的根源的上下文? –

+0

如果你有像'my.app.main'這樣的包,那麼你的目錄看起來就像'my/app/main'。根環境是應用程序的頂級目錄,所以它將是一個包含'my'目錄的目錄;) – Antoniossss