0

我正在尝试为我的项目构建一个 JAR 工件,它依赖于一个外部库nbvcxz和一个导入的库lanterna

在此处输入图像描述

在 Project Structure 中的 Artifacts 下添加 JAR 时,使用 JAR -> from modules with dependencies:

在此处输入图像描述

我添加到导入库的附加功能是:

  • 窗口不可调整大小
  • 窗口标题已设置为“密码游戏化”
  • 应用程序图标已设置为挂锁

从 IDE 中运行应用程序时,编译 lanterna 库的 SNAPSHOT jar 可以正常工作,上述所有功能和外部库都可以完美运行。但是,当我构建并运行 JAR 工件时,窗口的标题会更新,并且窗口本身不可恢复,但不会显示自定义图标,并且在初始启动屏幕上选择任何元素都会导致它中断。

从 Intellij 中运行时的行为(正确):

在此处输入图像描述 在此处输入图像描述

运行 JAR 工件时的行为(不正确):

在此处输入图像描述 在此处输入图像描述

我发现有趣的是,构建的工件在显示初始屏幕时使用了 lanterna 库(lanterna 是用于基于文本的 GUI 的半图形库),但不知何故忽略了我对其所做的一些更改。nbvcxz 库​​是从 maven 导入的,可以按预期工作。

任何帮助将不胜感激!

4

1 回答 1

0

我发现了问题 - 我使用了一个未在源文件夹中指定的文本文件,因此打包的 JAR 在执行期间无法找到它,这导致我从操作列表框中选择任何项目后立即中断。令人讨厌的是,尽管捕获并打印了任何异常,但我没有在控制台中收到任何错误消息。直到我添加了

JOptionPane.showMessageDialog(null, t.getClass().getSimpleName() +": " + t.getMessage()); throw t; }}

那告诉我它找不到文件。我已经删除了该文件,因为它被用于 R/W,通常建议不要这样做,因为 JAR 文件应该是不应该更改的档案。

未显示的图标是由于类似的问题,因为它也没有包含在源文件夹中,但也没有被正确引用。移动到正确位置并添加后

ImageIcon img = new ImageIcon(this.getClass().getResource("/pwdIcon.png"));

它工作得很好。

我想我可以在这里用一块石头杀死两只虫子。我不知道 JAR 文件是如何精确打包东西的,所以我假设如果它在 IDE 中工作,那么它可以作为 JAR 工作,而无需使用源文件夹和正确的引用。

于 2020-04-29T12:10:12.953 回答