Структура каталогов Ant и JAR - PullRequest
0 голосов
/ 10 марта 2012

У меня есть следующая структура каталогов для моего личного проекта:

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 

, это работает отлично, и значки отображаются, но я хочу выполнить только файл JAR в Windows (без всего каталога моего проекта).

Спасибо.

РЕДАКТИРОВАТЬ
Способ доступа к ресурсам:

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

1 Ответ

1 голос
/ 10 марта 2012

Вы хотите включить ресурс в сам jar-файл и прочитать файл с помощью этого API:

getResourceAsStream

Итак, сначала нужно убедиться, что ресурс находится в банке (откройте его и убедитесь, что он есть), а два убедитесь, что вы используете вызов API, такой как этот, а не механизмы ввода-вывода файла (потому что образ быть в банке; не в файловой системе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...