Java Swing Maven - 如何在 jar 文件中加载 ImageIcon
Java Swing Maven - How to load ImageIcon in jar file
这是我当前的目录结构(包含在 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>
所以我的问题如下:
引用我的 png 文件以使其在 jar 中可见的正确方法是什么?
为什么 png 文件位于 jar 的根目录中?
如果您需要加载图像作为应用程序的图标,您的代码应该是这样的。这将为您的应用程序设置图标。
this.setIconImage(new ImageIcon(getClass().getResource("/red-chip.png")).getImage());
如果需要使用setIcon
方法,可以使用
ImageIcon IC = new ImageIcon(getClass().getResource("/red-chip.png"));
这是我当前的目录结构(包含在 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>
所以我的问题如下:
引用我的 png 文件以使其在 jar 中可见的正确方法是什么?
为什么 png 文件位于 jar 的根目录中?
如果您需要加载图像作为应用程序的图标,您的代码应该是这样的。这将为您的应用程序设置图标。
this.setIconImage(new ImageIcon(getClass().getResource("/red-chip.png")).getImage());
如果需要使用setIcon
方法,可以使用
ImageIcon IC = new ImageIcon(getClass().getResource("/red-chip.png"));