[英]Load images from a jar file
我有一個從Netbeans IDE完美運行的應用程序,但是當從dist目錄中的jar文件運行時,不會加載必要的圖像。
我花了1個半天閱讀這個和其他論壇,試圖找到答案,但我無法讓jar圖像工作。
在這里,他是我的代碼摘錄:
String str = t.getText() + "100.gif";
Image img = null;
if (t != HIDDEN)
{
ClassLoader cldr = Terrain.class.getClassLoader();
URL url = cldr.getResource("fantasyhexwar/Images/" + str);
if (url == null)
JOptionPane.showMessageDialog(null, "no good");
img = ImageIO.read(url);
t.setImage(img);
}
我嘗試了很多相對路徑的組合,包括“images /”,“/ images /”等。圖像在jar文件中:
fantasyhexwar/Images/plains100.gif
fantasyhexwar/Images/quarry60.gif
fantasyhexwar/Images/ram80.gif
fantasyhexwar/Images/save map40.gif
fantasyhexwar/Images/scout80.gif
fantasyhexwar/Images/settler80.gif
fantasyhexwar/Images/ship80.gif
等等...
我知道我遺漏了一些基本的東西,但我不確定是什么。 我懷疑它與清單文件或類路徑有關。
希望有人可以指出我正確的方向......
編輯:問題似乎是這樣
URL url = Terrain.class.getResource("/fantasyhexwar/Images/" + str);
返回null。 圖像肯定在JAR中,在絕望中我也嘗試了所有可能的相對路徑,代碼如下:
ClassLoader cldr = Terrain.class.getClassLoader();
URL url = Terrain.class.getResource("/fantasyhexwar/Images/" + str);
if (url == null)
url = cldr.getResource("/fantasyhexwar/fantasyhexwar/Images/" + str);
if (url == null)
url = cldr.getResource("fantasyhexwar/fantasyhexwar/Images/" + str);
if (url == null)
url = cldr.getResource("/fantasyhexwar/Images/" + str);
if (url == null)
url = cldr.getResource("/Images/" + str);
if (url == null)
url = cldr.getResource("Images/" + str);
if (url == null)
url = cldr.getResource("/" + str);
if (url == null)
url = cldr.getResource(str);
if (url == null)
JOptionPane.showMessageDialog(null, "no good");
但直接從JAR執行時它都不起作用......
當我嘗試從命令行運行時,我得到:
java -cp .; FantasyHexWar.jar FantasyHexWarApp
Exception in thread "main" java.lang.NoClassDefFoundError: FantasyHexWarApp
Caused by: java.lang.ClassNotFoundException: FantasyHexWarApp
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: FantasyHexWarApp. Program will exit.
我的文件名有點粗心。 例如,一個文件名為“save map.png”,但應用程序正在尋找“Save Map.png”。
從驅動器加載文件時這很好用,但是當轉換成URL並直接從jar加載時,它就完全不同了。
因此,jar中的資源文件名似乎區分大小寫 。
我有同樣的問題。 解決方案來找我讀取有關getToolkit()函數的意見。 在我的情況下,我正在構建一個桌面應用程序,函數getToolkit()對我來說是不可用的。 相反,我需要使用此代碼:
Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(path));
該程序現在可以在Netbeans環境中運行。
使用此選項可顯示.jar文件中的圖像
ClassLoader.getSystemResource("images/Springz3.png");
如果圖像在jar文件中,請在fantasyhexwar / Images /。*下,
Image image = getToolkit().getImage(ClassLoader.getSystemResource("fantasyhexwar/Images/plains100.gif"));
將工作。
可能值得一試。
Image theImage = getToolkit().getImage(getClass().getResource("/path/to/image"))
我不認為它與從jar加載圖像有任何關系。 你得到的例外說: -
java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: FantasyHexWarApp. Program will exit.
這意味着,jar中沒有FantasyHexWarApp
主類。 修復它,它應該工作得很好。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.