Intellij构建破损的JAR伪装品

问题描述 投票:0回答:1

我试图为我的项目构建一个JAR工件,它依赖于一个外部的库 nbvcxz 和一个进口库 兰特纳:

enter image description here

在项目结构中的Artifacts下添加JAR时,使用的是JAR ->来自有依赖关系的模块。

enter image description here

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

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

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

从Intellij内部运行时的行为(正确)。

enter image description hereenter image description here

运行JAR程序时的行为(不正确)。

enter image description hereenter image description here

我发现有趣的是,构建的工件在显示初始屏幕时使用了lanterna库(lanterna是一个用于基于文本的GUIs的半图形化库),但却忽略了我对它的一些修改。nbvcxz库是从maven导入的,工作正常。

如果能得到任何帮助,我将非常感激

java intellij-idea executable-jar lanterna
1个回答
0
投票

我找到了问题所在--我使用的是一个没有在源文件夹中指定的文本文件,因此打包后的JAR在执行过程中无法找到它,这导致我从操作列表框中选择任何项目时就会出现中断。令人恼火的是,尽管我捕捉并打印了任何异常,但在控制台中却没有收到任何错误信息。直到我添加了

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

告诉我它找不到这个文件。我已经删除了这个文件,因为它被用来RW,一般建议不要这样做,因为JAR文件应该是不应该改变的档案。

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

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

它工作得很好。

我想我能够在这里一石二鸟。我不知道JAR文件到底是如何打包的,所以我认为如果它在IDE中工作,那么它将作为一个JAR工作,而无需使用源文件夹和适当的引用。

© www.soinside.com 2019 - 2024. All rights reserved.