Я написал свое первое приложение, и я не могу исправить одну проблему. При запуске приложения с использованием Eclipse все работает нормально. После экспорта в runnable jar (с использованием экспорта необходимых библиотек в сгенерированный JAR) при запуске jar в Windows - все работает нормально.NullPointerException при запуске JNLP в Java Web Start (jar работает как stardardlone)
Когда я пытаюсь запустить приложение, используя JNLP файл и Java Web Start - это бросает:
Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at MedicalOffice.MedicalOfficeView.<init>(MedicalOfficeView.java:122)
Дело в том, что следующий код:
imgURL = MedicalOfficeView.class.getResource("/patientsListSmall.jpg");
patientsList.setIcon(new ImageIcon(imgURL));
бросает NullPointerException.
У меня есть папка с изображениями в моем проекте, добавлена она в classpath и используется код выше. Он работает только в Eclipse и стандартном файле jar. Я проверил файл jar, и изображение существует в основной папке jar.
Это мой JNLP код:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0" codbase="http://localhost:8081/MOS/"
href="MedicalOfficeSoftware.jnlp">
<information>
<title>Small Medical Office Management Software</title>
<vendor>Pawel Raczy</vendor>
<description>MedicalOfficeManagement</description>
<offline-allowed/>
</information>
<resources>
<j2se version="1.8+"/>
<jar href="MedicalOfficeSoftware.jar"/>
</resources>
<application-desc main-class="MedicalOffice.MVCMedicalOffice"/>
</jnlp>
Я также попытался использовать следующий код в моем приложении:
URL imgURL = Thread.currentThread().getContextClassLoader().getResource("patientsListSmall.jpg");
patientsList.setIcon(new ImageIcon(imgURL));
, а также это:
URL imgURL = getClass().getClassLoader().getResource("patientsListSmall.jpg");
patientsList.setIcon(new ImageIcon(imgURL));
эффект то же самое - работает только в eclipse и стандартном файле jar.
* "У меня есть папка с изображениями в моем проекте, .." * Является ли этот каталог и его содержимое включенным в 'MedicalOfficeSoftware.jar'? –
@AndrewThompson Нет, после добавления этой папки в путь к классам она извлекается в основное содержимое jar (файл jpg находится непосредственно в файле MedicalOfficeSoftware.jar). Я попытался использовать getClass(). GetClassLoader(). GetResource, который ищет непосредственно в пути к классам, поэтому я не понимаю, почему он генерирует NullPointerException (только при использовании jnlp file-jar все еще отлично работает без него). Если мой runnable jar-файл также выдаст NullPointerException, я, вероятно, знаю, как его исправить, но он генерирует это исключение только при использовании jnlp и Java Web Start. Изменяет ли что-нибудь в механизме java? –
ОК .. вместо '" addPatientSmall.jpg "' try '" /addPatientSmall.jpg "' (обратите внимание на '/'). '/' Явно указывает JRE искать в «корне» пути класса. ** Редактирование: ** Я только заметил, что вы упомянули попытку обоих. * Придерживайтесь только ведущей '/', это моя рекомендация. –