Java Swing Maven - 如何在jar文件中加载ImageIcon



这是我当前的目录结构(包含在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 生成 jar 并运行 jar 文件时,它不显示图像。

我执行unzip -l <jar file>,看到我的红筹.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.要看的主要内容是构建jar插件。

(删除了无用的东西,如工件ID等(

<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 文件以便在 jar 中可见的正确方法是什么?

  2. 为什么 png 文件位于 jar 的根目录中?

如果您需要将图像加载为应用程序的图标,您的代码应该是这样的。这将为您的应用程序设置图标。

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

如果需要使用setIcon方法,可以使用

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

最新更新