【问题标题】:IntelliJ IDEA: Jar doesn't load images when run outside of IDEIntelliJ IDEA:在 IDE 之外运行时 Jar 不加载图像
【发布时间】:2017-06-30 01:54:46
【问题描述】:

我正在使用 JetBrains IntelliJ IDEA IDE。这是我用来生成jar文件的。从 IDE 运行 jar 文件,一切正常。

从终端运行jar,没有加载任何图像。

我的感觉是,通过阅读这篇文章,这与用于图像的相对路径有关......但我无法弄清楚这一点。我尝试了 JetBrains 论坛和 StackOverflow 上建议的各种不同的项目文件夹结构,但无济于事。一切都很好,直到我在 IDE 之外运行一个 jar。

我目前的项目结构:

我到底如何创建一个在任何地方都可以使用的 jar 文件?

【问题讨论】:

  • 您是否在项目设置中设置了工作目录? (到res?)res 文件夹是否被导出到 jar 工件中?您可以通过转到 Build artifact -> Edit 来检查它是否包含在“Output Layout”中
  • @1blustone 不是手动没有.. 这到底是在哪里完成的?一切正常,除非在 ide 之外运行 jar
  • 假设您正在使用工件系统构建您的 jar,构建 -> 构建工件 -> 编辑... -> 输出布局 -> 绿色 + 按钮 -> 目录内容,虽然我不是确定您是否必须从路径中删除 res/ 前缀(即我不确定 IntelliJ 是否包含 contents 或目录本身。)It is also possible to set a folder's type to "Resource folder" and I believe it would do this automatically.
  • @1blustone 我这样做了,不幸的是它似乎没有改变任何东西
  • 我正在尝试。资源文件夹似乎对我有用。

标签: java intellij-idea jar executable-jar jetbrains-ide


【解决方案1】:

好的,这就是对我有用的方法。我打开 项目结构 窗口 (Ctrl-Alt-Shift + S) 并转到“模块”选项卡。从那里,我可以轻松地从列表中选择一个文件夹,然后单击以使其成为资源目录。然后我就可以通过

访问 URL 的资源了
URL imageUrl = ClassLoader.getSystemResource("image.png")

不需要使用图像的路径,它是实际的 name.ext

【讨论】:

    【解决方案2】:

    使用 IntelliJ 的资源文件夹可能是正确的方法。

    只需右键单击您的res 文件夹,转到Mark Directory As 并选择Resources。

    然后您可以通过名称(不带res/ 前缀)访问此文件夹中的文件。

    工作视觉示例:

    【讨论】:

    • 唯一具有其他可用选项的文件夹是“out”文件夹
    • 好的我以为可能是它,并将其更改为资源但仍然没有骰子...我将重新启动项目并查看
    • 都是'resources/image.png'形式
    • @Totem 嗯。使用资源文件夹,它们不应该包含目录名称——这行得通吗? (另外,您的 res 文件夹的图标是否与我的示例 resources 文件夹的图标匹配?)
    • 不用担心.. 只是惊讶于似乎没有任何现成的可用文档。谢谢
    【解决方案3】:

    源和资源根的处理方式不同。

    资源目录中的所有文件将始终复制到输出路径。正如另一个答案中所建议的,其中一个解决方案是configure this directory as Resources root。这是让它工作的首选方式。

    如果您希望将 Source 根目录中的文件复制到输出,则必须将要复制的文件发送至 specify the patterns。

    如果项目是基于 Maven 或 Gradle 的,这些模式无效,IDE 将使用相应构建系统的规则来处理资源。

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 2013-11-14
      相关资源
      最近更新 更多