我正在用java寫一個遊戲,所有的工作或多或少都如你所期望的那樣工作,但我遇到的一個問題是讀取圖像並且聲音文件進入遊戲。我寫了一個在Eclipse中運行得非常好的方法,但是當我嘗試在可運行的jar(使用Eclipse導出)中測試它時,我的遊戲因爲無法讀取文件而卡在加載屏幕上。我意識到存在的問題是您無法在Jar中創建File對象,您必須使用流。這可以工作,但圖像/聲音位於文件夾內,我不太確定如何使用流讀取文件夾內的文件(即不知道文件數量)。正因爲如此,我試圖用ZipInputStream重寫方法(我發現這是在發佈之前尋找解決方案時推薦的)。這就是現在的方法:在Jar中讀取文件(ZipInputStream等)
imageMap = new HashMap<String, BufferedImage>();
String imagebase = "/images";
CodeSource src = PlatformerCanvas.class.getProtectionDomain().getCodeSource();
if(src != null)
{
URL jar = src.getLocation();
try
{
ZipArchiveInputStream zip = new ZipArchiveInputStream(jar.openStream());
ZipArchiveEntry ze = null;
while((ze = zip.getNextZipEntry()) != null)
{
System.out.println(ze.getName());
if(ze.getName().startsWith(imagebase) && ze.getName().endsWith(".png"))
{
loading++;
imageMap.put(ze.getName().replaceAll(imagebase + "/", ""), ImageIO.read(this.getClass().getResource(ze.getName())));
}
}
zip.close();
System.out.println("Finished Loading Images");
}
catch (IOException e)
{
e.printStackTrace();
}
}
但是,這完全跳過while循環,因爲getNextZipEntry返回null。我嘗試使用基本的Zip歸檔庫,但有人推薦Apache Commons庫,但都沒有成功。我的罐設置是這樣的:
Jar
/game/gameClasses
/images/imageFiles
/sounds/soundFiles
/whateverOtherFoldersEclipseCreated
所以我的問題是:爲什麼不是這個當前方法的工作,如何解決?或者,我如何以不同的方式加載圖像/聲音? 我看了很多其他問題,並嘗試了很多不同的東西,但都沒有爲我工作。
你的遊戲是基於GUI的嗎? –
不是100%確定你的意思,但我使用緩衝策略在畫布上進行繪圖。 @JtheRocker – StrongJoshua
你想提取的jar/zip文件的名稱是什麼? –