2013-07-21 60 views
0

嗨一直試圖從我的SRC文件夾中訪問圖像文件,以便我可以直接從jar中運行它。不幸的是它沒有加載它們,我可以請你幫忙。它是一個空指針異常,無法讀取輸入文件。這裏是該文件夾的位置以及我在代碼中的位置。 CODE:「/sprites/mapsheet2.png」目錄:C:\ Users \ Lucas \ workspace \ Vigilante \ src \ sprites \ mapsheet2.png如果有任何額外的信息需要告訴我,併發送它。從.jar文件如何訪問我的SRC文件夾中的文件?

+0

*任何額外的信息* - 代碼請。 –

+0

*如果需要任何額外的信息告訴我,併發送它*把相關的代碼,而不是隻是解釋問題。 –

+0

答案都是正確的,但我相信你可能會遇到不同的問題。構建jar文件時,構建系統是否需要包含這些特定資源?通常,構建系統配置將有選項來指定要在jar中包含哪些類型的資源。 –

回答

0

資源可以裝入:getClass().getResource() 它返回的網址與正確的路徑

Image icon = ImageIO.read(getClass().getResource("image´s path")); 
+0

線程「main」中的異常java.lang.IllegalArgumentException:input == null! \t at javax.imageio.ImageIO.read(Unknown Source) \t at Graphics.spritesheet。 (spritesheet.java:21) \t at Tile.Tile。 (平鋪。java:11) \t at Tiles.Wall。 (Wall.java:10) \t at Tiles.tiles。 (tiles.java:7) \t at Core.core。 (core.java:31) \t at Core.core.main(core.java:240) – user2551633

+1

不要將輸出置於註釋中。這是不可讀的。相反[編輯](http://stackoverflow.com/posts/17774984/edit)的問題包括輸出,並使用代碼格式。爲此,請選擇樣本並單擊郵件發佈/編輯表單上方的「{}」按鈕。 –

0

您可以將.jar歸檔文件打包所有必需的資源。並訪問它使用

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("res\file.img") 

可以使用imageIO轉換爲圖像。

+0

protected spritesheet s = new spritesheet(「/ sprites/Blocks.png」); – user2551633

0

您可以嘗試將圖像作爲ByteArrayInputStream加載到BufferedImage中。像這樣: BufferedImage img = null; try { BufferedInputStream sc = new BufferedInputStream(ImageLoad.class.getResourceAsStream(file)); ArrayList in = new ArrayList(); byte b = null; ((b = sc.read)!= null)in.add(b); byte [] bytes = new byte [in.size()];
for(int i = 0; i < in.size(); i ++)bytes [i] = in.get(i); img = ImageIO.read(new ByteArrayInputStream(bytes)); } catch(Exception e){}

然後只是在需要的時候使用圖片!唯一的事情是你必須將sprites/mapsheet2.png放在你正在運行它的類的同一個文件夾中。假設你的類是ImageLoad.java,ImageLoad.java必須和sprites/mapsheet2.png在同一個包中。 EC:

ImageLoad.java位於package image.load中,位於image.load中,是資源精靈(A Dir)和sprites/mapsheet2.png,並且對於在該區域中加載所需的任何其他映像。如果你想加載圖像並在另一個類中使用它,你可以創建一個包含上面代碼的方法,並返回一個bufferedImage。 EC:

public class ImageLoad { 
     public static BufferedImage load(String file) throws Exception{ 
       BufferedInputStream sc = new BufferedInputStream(ImageLoad.class.getResourceAsStream(file)); 
       ArrayList<Byte> in = new ArrayList<Byte>(); 
       byte b = null; 
       while((b = sc.read) != null)in.add(b); 
       byte[] 
       bytes = new byte[in.size()];      
       for(int i = 0; i < in.size(); i ++)bytes[i] = in.get(i); 
       return ImageIO.read(new ByteArrayInputStream(bytes)); 
        } 
       } 
+0

我不認爲這個方法是錯誤的,在我嘗試從SRC讀取它之前,它讀得很完美。 – user2551633

+0

堅持其固定的方式感謝大家的快速和可靠的幫助。 rbilliant社區。 – user2551633

相關問題