【问题标题】:Images not loading after creating Jar创建 Jar 后图像未加载
【发布时间】:2021-12-10 12:41:24
【问题描述】:

我正在编写一个简单的程序,我的图像可以在项目中正常加载,但是一旦我将其导出到 jar 文件中,它们都不会加载。我几乎没有创建工件或 jar 文件的经验。

项目结构:

项目:

    src: 
       myclass1, myclass2...

    res:
        image1.png image2.png...

我使用 Toolkit.getdefaultToolkit 加载图像

在我的班级中,我通过编写在构造函数中加载图像 myImage = toolkit.getImage("res/image1.png"); 这在项目中非常有效。在罐子里不起作用

我也试过 myImage = toolKit.getImage("image1.png"); 这在项目中或打开 jar 时不起作用

我知道工具包不是加载图像的最佳方式,但我想知道如何在使用工具包时解决此问题。

我什至尝试使用我桌面上文件夹的绝对路径,它们再次在我的项目中正常加载,但在打开 jar 时它们没有被加载。请帮助我尝试了一切。谢谢

(顺便说一句)如果我在 intellij 中打开 jar 文件,图像会加载,但如果我在 finder 中或从我的桌面打开 jar 文件,它们不会。我希望能够将完成的项目发送给某人

【问题讨论】:

    标签: java intellij-idea corretto


    【解决方案1】:

    toolkit.createImage(String) 方法接收一个字符串,并将其解释为一个路径,并在该路径中查找一个文件。 jar 文件中的条目本身不是文件。因此,不可能使用这种方法来读取 jar 中的图像文件。

    但是,这不是唯一的 createImage 方法。还有toolkit.createImage(URL),这就是你想要的。

    SomeClass.class.getResource("something.png")
    

    此表达式适用于任何类(Foo.class 为您获取 Foo 的类实例,并且所有类实例都有 getResource 方法),并将在完全相同的位置查找命名条目 SomeClass.class(文件)生活。如果SomeClass.class 当前存在于一个 jar 文件中,那么这就是它的外观。

    因此,确保img.png 位于您的类文件所在的同一位置(确保它与其他文件一起受到震动),这样就可以了。您也可以要求例如SomeClass.class.getResource("/foo/bar/img.png");然后,这将从 SomeClass 所在的“根”查看。因此,如果您有一个 jar,如果您运行 jar tvf thatjar.jar 并得到:

    ....
    /com/foo/yourpackage/SomeClass.class
    ....
    /foo/bar/img.png
    

    然后/foo/bar/img.png 工作。

    因此:一旦您知道将这些内容放在 jar 文件中的什么位置:

    toolkit.createImage(YourClass.class.getResource("image1.png"))
    

    就是你要找的。​​p>

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2012-09-08
      • 2020-04-30
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多