Java Swing Maven - Как загрузить ImageIcon в файл JAR - PullRequest
1 голос
/ 31 мая 2019

Вот моя текущая структура каталогов (содержится в каталоге connect4):

├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── dv
│   │   │           └── app
│   │   │               ├── App.java
│   │   │               ├── Board.java
│   │   │               
|   |   |               
│   │   │               
│   │   └── resources
│   │       ├── red-chip.png
│   │       
│   └── test
│       ...            
|                     
└── target
    ├── classes/com/dv/app/*.class

По существу с Board.java, я пытаюсь получить доступ к red-chip.png.

Я попробовал много вариантов, чтобы это сработало, сейчас у меня просто есть:

ImageIcon redChip = new ImageIcon("red-chip.png");

Я пытался изменить путь для использования /resources, использовал функцию getResource, но ничего не получалось.

Когда я генерирую банку с помощью mvn package и запускаю файл баночки, изображение не отображается.

Я выполняю unzip -l <jar file> и вижу, что мой red-chip.png по какой-то причине перемещен в корневой каталог.

  Length      Date    Time    Name
---------  ---------- -----   ----
      126  2019-05-30 20:03   META-INF/MANIFEST.MF
        0  2019-05-30 20:03   META-INF/
        0  2019-05-30 19:19   com/
        0  2019-05-30 19:19   com/dv/
        0  2019-05-30 19:20   com/dv/app/
        0  2019-05-30 20:03   META-INF/maven/
        0  2019-05-30 20:03   META-INF/maven/com.dv.app/
        0  2019-05-30 20:03   META-INF/maven/com.dv.app/connect4/
     4190  2019-05-30 19:20   com/dv/app/App.class
     4975  2019-05-30 19:20   com/dv/app/Board.class
      110  2019-05-29 20:29   META-INF/maven/com.dv.app/connect4/pom.properties
     7856  2019-05-30 19:32   red-chip.png

Вот мой pom.xml. Главное, на что стоит обратить внимание, это плагин build jar.

(удалены ненужные вещи, такие как artifactID и т. Д.)

<project xmlns="...">
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.dv.app.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Итак, мои вопросы таковы:

  1. Как правильно ссылаться на мой png-файл, чтобы он был виден в банке?

  2. Почему файл png находился в корне в банке?

1 Ответ

1 голос
/ 31 мая 2019

Если вам нужно загрузить изображение в качестве иконки для приложения, ваш код должен выглядеть следующим образом. Это установит значок для вашего приложения.

this.setIconImage(new ImageIcon(getClass().getResource("/red-chip.png")).getImage());

Если вам нужно использовать setIcon метод, вы можете использовать

ImageIcon IC = new ImageIcon(getClass().getResource("/red-chip.png"));
...