Интеллидж строит разбитый JAR-артефакт - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать JAR-артефакт для своего проекта, который использует одну внешнюю библиотеку nbvcxz и одну импортированную библиотеку lanterna :

enter image description here

При добавлении JAR в разделе Артефакты в структуре проекта используется JAR -> из модулей с зависимостями:

enter image description here

Дополнительные функции, которые я добавил в импортированную библиотеку:

  • окно не может быть изменено в размере
  • заголовок окна был установлен на 'Gamification Password'
  • значок приложения был установлен на замок

Компиляция банки SNAPSHOT библиотеки lanterna работает, как и ожидалось, при запуске приложения из среды IDE, при этом все перечисленные функции и внешняя библиотека работают отлично. Однако, когда я создаю и запускаю JAR-артефакт, заголовок окна обновляется, и само окно не является устойчивым, но пользовательский значок не отображается, и выбор любого элемента на начальном начальном экране приведет к его поломке.

Поведение при запуске из Intellij (правильно):

enter image description here enter image description here

Поведение при запуске артефакта JAR ( неверно):

enter image description here enter image description here

Мне кажется интересным то, что встроенный артефакт использует библиотеку lanterna в качестве начальной отображается экран (lanterna - это полуграфическая библиотека, используемая для текстовых графических интерфейсов), но некоторые изменения, которые я в нее внес, не включены. Библиотека nbvcxz импортирована из maven и работает как положено.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 29 апреля 2020

Я обнаружил проблему - я использовал текстовый файл, который не был указан в исходной папке, поэтому упакованный 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 без использования исходных папок и правильных ссылок.

...