【问题标题】:File not found in jarjar 中找不到文件
【发布时间】:2019-03-02 23:25:27
【问题描述】:

我正在使用 java swing 应用程序。我正在使用放置在 uploads 文件夹中的图标图像。当我运行我的项目时,它工作正常。

我将我的项目导出为 jar。当我运行我的 jar 文件时,它显示 file not found 错误。

这是我的代码,

BufferedImage img = ImageIO.read(new File(Config.IMAGE_RESOURCE_FOLDER + "/" + fileName));

folder structure

【问题讨论】:

  • 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。
  • 顺便说一句 - Config.IMAGE_RESOURCE_FOLDER 的值是什么(它指向什么路径)?
  • Config.IMAGE_RESOURCE_FOLDER = "图片"
  • 我在静态方法中使用了这个功能。所以当我使用 this.getClass().getResource("/path/to/the.resource");它不工作。而不是这个,我也尝试使用 sttic 方法类。但不工作。
  • 您的代码当前正在寻找位于./images 目录中的文件,其中.当前 目录,即java 程序所在的目录开始了。因此,如果您没有从正确的目录执行 Java,或者如果您的图像位于名为 uploads 的文件夹中,则它可能无法工作。

标签: java file jar embedded-resource


【解决方案1】:

我假设你的文件在罐子里。所以将一个名为 Locator 的类放在同一个目录中。并使用以下代码:

URL url = locator.getURL(name + ".gif"); 图片 img = Toolkit.getDefaultToolkit().getImage(url);

类定位器是:

包 schachfiguren; 导入java.net.*; 公共类定位器 { 公共 URL getURL(字符串 pfad) { URL url = this.getClass().getResource(pfad); 返回网址; } }

pfad 是文件的名称。例如 sbs.gif。

【讨论】:

  • 只有当文件与 Locator 类不在同一个目录中时,我才会收到 NullPointerException。
  • 我的 images 文件夹在我的 src 文件夹之外。我将 images 移动到 src 文件夹中。它现在正在工作。但是当它在外面时,它适用于正常的项目运行,但不适用于jar运行。
  • 我已经尝试过了。但得到了相同的结果。然后我把它移到src 然后尝试你的代码。它适用于两者。我认为imagessrc 不是好习惯。无论如何,它现在正在工作。非常感谢。
猜你喜欢
  • 2013-12-25
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2018-06-29
  • 1970-01-01
相关资源
最近更新 更多