You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中加载嵌入式资源?Swing按钮图标加载异常排查

解决Swing应用中嵌入式资源加载的NullPointerException问题

问题根源

你遇到的NullPointerException是因为javaClass.getResource()返回了null,说明JVM在classpath里找不到指定的图像资源。结合Maven构建的特点,核心原因是资源文件未被正确打包到classpath中,或资源路径配置有误。

解决方案

1. 遵循Maven默认资源目录规范(推荐)

Maven默认会将src/main/resources目录下的文件复制到编译后的classpath中,按以下步骤操作:

  • 创建对应包结构的资源目录:src/main/resources/com/gmail/fishnet37222/fndice
  • 将New24.gif放入该目录
  • 保留现有代码不变:
    btnNewGame.icon = ImageIcon(javaClass.getResource("/com/gmail/fishnet37222/fndice/New24.gif"))
    
    编译打包后,资源会出现在target/classes/com/gmail/fishnet37222/fndice/路径下,JVM即可正确加载。

2. 若需保留资源在源码目录,修改Maven配置

如果坚持把图像资源放在src/main/java的包路径下,需修改pom.xml让Maven复制这些资源到classpath:

<build>
    <resources>
        <!-- 复制src/main/java下的图像资源 -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.gif</include>
                <include>**/*.png</include>
                <!-- 添加其他需要的资源格式 -->
            </includes>
        </resource>
        <!-- 保留默认资源目录配置 -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

3. 验证资源是否存在

执行mvn clean compile后,检查target/classes/com/gmail/fishnet37222/fndice/目录下是否存在New24.gif。若不存在,说明Maven未正确复制资源,需检查目录结构或pom配置。

4. 可选:使用相对路径简化代码

如果MainWindow类本身就在com.gmail.fishnet37222.fndice包下,可使用相对路径(不带开头的/)简化代码:

btnNewGame.icon = ImageIcon(javaClass.getResource("New24.gif"))

内容的提问来源于stack exchange,提问作者Dave F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:31:20