【问题标题】:.jar will not find internal resource images but compiled program does.jar 不会找到内部资源图像,但编译的程序会
【发布时间】:2020-04-04 21:19:57
【问题描述】:

我一直在尝试加载一些图片以在我的 Swing UI 中使用,虽然我编译的程序会正确加载图片,但我的 .jar 找不到图片

首先,我已将我的资源文件标记为“资源根”。项目布局如下:

编译输出布局如下所示:

.jar 布局如下所示:

现在,加载图片的代码在 gui 包中;在这里:

        try {
            System.out.println(this.getClass().getResource("../images/buttonClip.png").getPath());
            attchmntBtnImg = ImageIO.read(getClass().getResource("../images/buttonClip.png"));
            sendMsgBtnImg  = ImageIO.read(getClass().getResource("../images/buttonForward.png"));
        }
        catch (IOException e) {
            e.printStackTrace();
        }

打印行输出正确打印图片的路径

/C:/Users/path/to/Project/out/production/Peer2Party_desktop/images/buttonClip.png

虽然从 intellij idea 运行它时没有错误,但生成的工件(如果我从 cmd 运行它,有或没有管理员权限)在 System.out.println() 给我一个 NullPointerException,但是,毫无疑问,这不是错误的原因,因为即使我删除了 println,它仍然会在下一行崩溃。

我已经尝试执行这些操作以加载图像,但无济于事:

this.getClass().getResource("/../images/buttonClip.png");
getClass().getResource("/../images/buttonClip.png");
this.getClass().getResource("images/buttonClip.png");
getClass().getResource("images/buttonClip.png");
this.getClass().getResourceAsStream("images/buttonClip.png");
getClass().getResourceAsStream("images/buttonClip.png");

非常欢迎任何帮助。

重要提示:我在 Windows 10 上,图片位于正确的路径中(file.jar/images/buttonClip.png),但在运行时.class 找不到它

【问题讨论】:

    标签: java javax.imageio resource-loading


    【解决方案1】:

    简单地使用

    this.getClass().getResource("/images/buttonclip.png");
    

    从项目根目录查找文件

    【讨论】:

    • 哦,天哪。天啊。谢谢你。见鬼,我想我已经试过了,但可能不完全是这个。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2014-03-22
    • 2019-11-08
    相关资源
    最近更新 更多