2015-09-20 10 views
1

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

+0

* "У меня есть папка с изображениями в моем проекте, .." * Является ли этот каталог и его содержимое включенным в 'MedicalOfficeSoftware.jar'? –

+0

@AndrewThompson Нет, после добавления этой папки в путь к классам она извлекается в основное содержимое jar (файл jpg находится непосредственно в файле MedicalOfficeSoftware.jar). Я попытался использовать getClass(). GetClassLoader(). GetResource, который ищет непосредственно в пути к классам, поэтому я не понимаю, почему он генерирует NullPointerException (только при использовании jnlp file-jar все еще отлично работает без него). Если мой runnable jar-файл также выдаст NullPointerException, я, вероятно, знаю, как его исправить, но он генерирует это исключение только при использовании jnlp и Java Web Start. Изменяет ли что-нибудь в механизме java? –

+1

ОК .. вместо '" addPatientSmall.jpg "' try '" /addPatientSmall.jpg "' (обратите внимание на '/'). '/' Явно указывает JRE искать в «корне» пути класса. ** Редактирование: ** Я только заметил, что вы упомянули попытку обоих. * Придерживайтесь только ведущей '/', это моя рекомендация. –

ответ

-1

В вашей подписанной банке есть атрибут доверенной библиотеки в файле манифеста?