我的个人项目有下一个目录结构:
mines/
build.xml
build/
build/classes/
build/jar/
src/minesweeper
src/minesweeper/view/
src/minesweeper/model/
res/img/
和我的build.xml
文件是:
<project>
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/minesweeper-clone.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="minesweeper.Minesweeper"/>
</manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/minesweeper-clone.jar" fork="true"/>
</target>
在Ubuntu我做:
$ant compile jar run
一切都好。但如果我这样做:
$java -jar minesweeper.jar
程序运行,但不显示图标。
在我的src/minesweeper/view/GameFrame.java
课程中,我有:
private static final String NEW_GAME_ICON = "res/img/new_game.png";
和new_game.png
位于res/img/new_game.png
我知道我是否这样做:
$java -jar build/jar/minesweeper-clone.jar
它工作正常,图标显示,但我想只在Windows中执行jar文件(没有我项目的整个目录)。
感谢。
修改
我访问资源的方式是:
JMenuItem newGameItem1 = new JMenuItem("New game", new ImageIcon(NEW_GAME_ICON));
答案 0 :(得分:1)
您希望将资源包含在jar本身中,并使用此API读取文件:
首先你需要确保资源在jar中(打开它并确保它在那里),并且两个确保你正在使用API调用,而不是文件IO机制(因为图像将在jar中;不在文件系统上)。