导出到可运行的 jar 后无法读取图像

问题描述

我遇到了这个问题,我的程序在 eclipse 中运行良好,正确创建了要制作成 JLabels 的图像,但是当我尝试将我的程序导出到可运行的 jar 中时,它不再起作用。我已经进行了一些调试并设法弄清楚我用于创建图像的方法在导出后不起作用。我认为这是因为使程序成为可运行的 jar 文件会更改文件的路径,但我对如何修复它一无所知。相关详细信息如下,不胜感激!

// This is the method that calls the method to create the pictures
public static void buildMapper() {
        readPics();
    ...

    // Create JLabel pictures
        JLabel f1 = new JLabel(new ImageIcon(floor1.getScaledInstance(1275,825,Image.SCALE_SMOOTH)));
    ..
}

private static void readPics() {
        try {
            // Load floors
            floor1 = ImageIO.read(new File("src\\resources\\floor1.png"));
      ...
    }catch(IOException ex){ System.out.println("IO Exception"); }
}
// floor1 is a private static BufferedImage

这是我设置项目树的方式。资源文件夹仅包含我使用过的所有图像,例如 floor1.png Project Explorer

再次,任何帮助将不胜感激!这是我第一次做这么大范围的编程项目,涉及很多东西需要自己学习,所以肯定有很多错误可以借鉴!

编辑:我设法修复它。如果其他人遇到困难,我的解决方案是将行 floor1 = ImageIO.read(new File("src\\resources\\floor1.png")); 更改为 floor1 = ImageIO.read(getClass().getResource("/resources/floor1.png"));。我还必须使该方法不是静态的,因为不能在静态方法调用 this.getClass()。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...