2013-06-03 167 views
0

我正在開發一款遊戲,並打算爲它創建一個jar文件,向我的一些朋友發出beta版本,以便我知道遊戲在不同分辨率下的外觀以及它如何在更糟和更好的計算機上運行。問題是,當我運行jar文件時,它將是完全黑色的,沒有任何事情會發生。爲程序創建一個.jar文件

我認爲我已經做了錯誤的圖像路徑,因爲如果我從net beans文件夾中刪除所有圖像,它看起來就像我啓動jar時的樣子。我已經完成了圖片的路徑,只需寫下他們的名字,並將它們放在與課程相同的文件夾中。

jar文件看起來像這樣: 兩個文件夾,META-INF和Apocalypse。裏面META-INF是清單文件,它看起來像這樣:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.4 
Created-By: 1.7.0_17-b02 (Oracle Corporation) 
Class-Path: 
X-COMMENT: Main-Class will be added automatically by build 
Main-Class: Apocalypse.Main 

裏面的啓示錄文件是所有類和所有的圖像,給的一個例子,我如何在代碼中,我得到得到的圖像他們是這樣的ImageIcon ii = new ImageIcon("Image.png")我沒有任何路徑的圖像,但不應該這個代碼的工作,如果我有圖像在同一個文件夾作爲類?除此之外還有什麼方法可以實現圖像的路徑(如果是他們那就是問題)?

+0

我會用谷歌搜索「_add圖像罐子檔中的」啓動接着是您使用的IDE的名稱。然後,我會選擇你在結果中看到的這個網站上的十幾個鏈接之一...每天都會問這個問題。 – jahroy

回答

2

你說:

裏面的啓示錄文件是所有類和所有圖像

但然後粘貼示例代碼:

ImageIcon ii = new ImageIcon("Image.png") 

這嘗試從本地計算機上的文件加載。因此它依賴於環境,不適合於廣義部署。

這不是你應該做的。您應該將這些圖像包含在jar文件中並使用the ImageIcon constructor using a URL as a parameter加載它們。

現在,爲了在類路徑中獲取圖像的URL(並且包括jar查找),請參閱Class#getResouce()

典型使用場景:創建你的罐子一個工具類,將做什麼,說:

public final class MyImageLoader 
{ 
    // Utility class: no instantiation 
    private MyImageLoader() {} 

    public static ImageIcon getImage(final String resourcePath) 
    { 
     final URL url = MyImageLoader.class.getResource(resourcePath); 
     return new ImageIcon(url); 
    } 
} 

,然後使用:

final ImageIcon i1 = MyImageLoader.getImage("/path/to/image.png"); 
+0

這個工程,但我也有保存文件,因爲我使用File類來創建這些保存文件我不能使用一個URL,所以我如何使它在這種情況下工作? –

+0

對於保存文件,您必須採取在System.getProperty(「user.home」)後面保存某處的方法。但是,似乎有一個問題:請參見[這裏](http://stackoverflow.com/questions/1503284/java-system-getpropertyuser-home-returns)。然而,如果您甚至無法確定這一點,我認爲僅僅放棄遊戲並警告用戶「對不起,我無法確定保存文件的位置」是一種理智的做法。 – fge