当前位置: 首页 > 知识库问答 >
问题:

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

孟花蜂
2023-03-14

这是我当前的目录结构(包含在connect4目录中):

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

基本上来自板。java,我正在尝试访问红筹码。png

我尝试了很多变体来工作,现在我只有:

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

我尝试改变路径使用/Resources,使用getResources函数,但似乎没有工作。

当我使用mvn-package生成jar并运行jar文件时,它不会显示图像。

我执行解压-l

  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。主要要看的是buildjar插件。

(删除了无用的东西,如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的根目录中?


  • 共有1个答案

    刘博文
    2023-03-14

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

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

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

    ImageIcon IC = new ImageIcon(getClass().getResource("/red-chip.png"));
    
     类似资料:
    • 如何加载放置在可执行jar文件的资源文件夹中的属性文件。在这里,我的应用程序本身就是一个jar,它自己执行。它需要在运行时根据代码中提到的路径找到这个属性文件(放在资源文件夹下)。我用过以下两种方法,但都没用。这里的重点是,当我在eclipse中执行时,这两个选项都可以正常工作,但当我将其打包到可执行jar中时,这两个选项都不起作用。它抛出NullPointerException。我在这里看到的唯

    • 我正在尝试从可执行JAR文件加载图像。 我跟踪了这里的信息,然后是这里的信息。 这是检索图像的函数: 这就是它的名称: 这是一个简单的对象。我也不会得到NullPointerException,除非它被UI屏蔽。 我检查了JAR文件,图像位于: /图片/标识1。巴布亚新几内亚 当前代码在eclipse中以及导出到JAR并在终端中运行时都有效,但在双击JAR时不起作用,在这种情况下,图标是默认的JF

    • 问题内容: 我被要求构建一个Java系统,该系统在运行时能够加载新代码(扩展)。我的代码运行时如何重新加载jar文件?或如何加载新的jar? 显然,由于持续的正常运行时间很重要,因此,我想增加在此过程中重新加载现有类的功能(如果这样做不会使事情复杂化)。 我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 问题答案: 用现有数据重新加载现有类可能会破坏事情

    • 我有两个jar文件。第一个只包含接口 在请求的基础上,我试图从中加载我的实现类。jar文件存在于某个文件夹中,在运行时使用URLClassLoader。 课程正在加载 我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。 同样的代码可以在正常的J2SE环境中工作,但不能在JBoss环境中工作。 如果我的查询不清楚,请让我知道我也可以粘贴源代码。

    • 问题内容: 我需要从罐子中加载属性文件。该罐子包含在war文件中。这是结构 现在,我在一个servlet中编写了以下代码,如下所示: 但是上面的代码我得到流为空。如果我将属性文件放在ROOT.war / WEB- INF中,则可以正常工作。我有一个不错的主意,如果getResourceAsStream中的路径以“ /”开头,那么它将在上下文根目录中搜索资源。但是,如何读取位于jar的资源,该jar

    • 问题内容: 我正在构建一个Java应用程序,该应用程序的某些部分需要每日更新。我想将频繁更新的零件作为小jar文件从服务器下载到内存。我正在将jar文件下载为字节流,而不使用URLClassloader。 如何使jar文件中的类可从我的自定义类加载器供系统类加载器使用? 我如何确保下载jar文件和加载的类永远不会缓存或写入磁盘。 问题答案: 您可以从内存中加载自定义类加载器。您可以强制系统加载器从