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

标签 java swing maven embedded-resource 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>并看到我的 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 。主要看的是构建 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 文件以便其在 jar 中可见的正确方法是什么?

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

最佳答案

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

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

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

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

关于Java Swing Maven - 如何在 jar 文件中加载 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56387179/

相关文章:

java - 用于java安装的NSIS脚本

java - 不可见的 JMenuBar,加速器不工作

java - 更新 UI 时接收多个 UDP 数据包

java - JAXB 为情节中已有的包生成重复的 ObjectFactory

maven - "Invoke Maven 3"与 "Invoke top-level Maven targets"

java - 如何在 Liferay 日历中获取单个 google 重复事件的 SyncEntryId?

java - 我如何使用数组来制作随机圆圈

java - Swing 计时器仅工作一次

java - 如何将 CardLayout 与多个 JButton 一起使用?

java - maven jetty 错误 'Config error at <Set name="线程池">'