有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javaant和jar目录结构

我的个人项目有下一个目录结构:

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";

而且{}在{}

我知道如果我这样做:

$java -jar build/jar/minesweeper-clone.jar 

它工作得很好,图标也会显示出来,但我只想在windows中执行jar文件(不包括我项目的整个目录)

谢谢

编辑
我访问资源的方式是:

JMenuItem newGameItem1 = new JMenuItem("New game", new ImageIcon(NEW_GAME_ICON));

共 (1) 个答案

  1. # 1 楼答案

    您希望将资源包含到jar本身中,并使用以下API读取文件:

    getResourceAsStream

    因此,首先您需要确保资源在jar中(打开它并确保它在那里),其次确保您使用的是这样的API调用,而不是文件IO机制(因为映像将在jar中,而不是在文件系统上)