2012-12-16 32 views
1

考慮下面的類:如何將BufferedImage作爲資源加載,並將其放置在何處?

final public class ResourceLoader 
{ 
    public BufferedImage bg; 
    public BufferedImage tile; 
    public ResourceLoader() 
    { 

    } 
} 

我的目標是能夠訪問這樣的圖像文件:

ResourceLoader res = new ResourceLoader(); 
// I can display res.bg and res.tile now. 

什麼我需要在構造函數中寫,我在哪裏需要放置圖像,以便它們在調試過程中以及在打包到.jar之後都能正常工作?我正在使用Eclipse。

另外,有沒有更好的方法來做到這一點? (我只需要一次加載它們)

回答

2

問題真的歸結爲'如何訪問應用程序的運行時類路徑上的資源?'。所以..

如何裝入一個BufferedImage,作爲一個資源..

如果你的意思是「應用程序資源」(由您提供的IE瀏覽器,與應用程序,而不是被識別的圖像用戶)。那麼答案通常是:從班級路徑:E.G.

this.getResource("/path/to/the.jpg"); 

..和我在哪裏把它?

/path/to在Jar上的運行時類路徑。請注意,只要類路徑是正確的,這也可以在開發中使用(使用鬆散或'未受限制的'資源)。

+0

是的,我的意思是應用程序資源,對不起。我結束了使用'bg = ImageIO.read(getClass()。getResource(「resources/bg.png」));'它似乎工作,但Eclipse將不包括.jar中的資源文件夾,即使我添加它作爲源文件夾(它工作正常,如果我手動添加它)。我如何實現這一目標? – NoToast

+1

我並不確定。我傾向於編寫一個完成所有工作的Ant腳本(eclipse運行Ant腳本),但這與通常的'IDE方式'衝突。 –

+0

我想我會手動添加它們,感謝您的幫助。 – NoToast

-1

你想即負載一次分配一次,然後您可以通過以下方式來完成下面的類設計

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

final public class ResourceLoader { 
    private final BufferedImage bg; 
    private final BufferedImage tile; 

    public ResourceLoader(BufferedImage bg, BufferedImage tile) { 
     this.bg = bg; 
     this.tile = tile; 
    } 

    public ResourceLoader() { 
     try { 
      bg = ImageIO.read(new File("images/image1.jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      tile = ImageIO.read(new File("images/image2.jpg")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    public BufferedImage getBg() { 
     return bg; 
    } 

    public BufferedImage getTile() { 
     return tile; 
    } 
} 

這裏你點滿足

  • 沒有任何publicsetter方法,這樣你就不能在類別外分配字段
  • 字段是privatefinal因此你不能在病房後修改它們。
  • 如果您想訪問該字段,則可以使用fileds的getter方法來獲取字段值。
+0

這是一個很好的設計,但我試圖從構造函數中實際加載文件。 – NoToast

+0

您可以在構造函數中編寫文件加載的代碼,它太容易了 –

+0

到目前爲止,我嘗試過的每種方法都不能用於.jar中的文件,查找上帝知道在哪裏或者不在的文件所有。如果這是一個愚蠢的問題,我很抱歉,但我無法掌握整個資源。 – NoToast

相關問題