2015-11-24 14 views
0

Я пытаюсь развернуть Java-апплет. Когда я запускаю его в средстве просмотра апплетов Eclipse, он загружается нормально (хотя он не отвечает на команды клавиатуры - это вопрос для более позднего). После того, как экспортировать ее в баночку и пытается запустить его в браузере, он всегда дает NullPointerException на этой линии в одном из классов:Как загрузить изображение с помощью getResources() в Java JApplet?

private static final ImageIcon NULL_IMAGE = new ImageIcon((new Object()).getClass().getResource("/tiles/blank.png")); 

Я попытался перемещения первого использования этого класса от Init() к start() без изменений. Запуск «jar -tf applettest.jar» в окне терминала подтверждает, что /tiles/blank.png действительно существует в JAR. Так что я мог пропустить при экспорте этого JAR? Должен ли я просто забыть о версии апплета и использовать JNLP?

+0

* «Должен ли я просто забыть о версии апплета и использовать JNLP?» * - Это было бы хорошей идеей, но могло бы не решить проблему. Что касается апплета, не отвечающего на нажатия клавиш, это обычная проблема с 'KeyListener', которая была решена с помощью [Key Bindings API] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding. html) – MadProgrammer

+2

Вы пытались использовать 'new ImageIcon (YourClass.class.getResource ("/tiles/blank.png "));'? – MadProgrammer

+0

Использование TheClass.class, похоже, устраняет проблему с изображением ... или, по крайней мере, дает мне другую ошибку, на этот раз говоря, что не может подключиться к серверной БД. Что касается ключевой проблемы, я использую привязки клавиш, а не KeyListeners. Я должен отметить, что существует отдельная версия, которая не имеет ни одной проблемы, по крайней мере, при запуске из Eclipse. Думаю, я попытаюсь использовать его с JNLP. – Leonide

ответ

0

Переместите PNG изображение в тот же пакет, как ваш класс, и попробовать это:

private final ImageIcon NULL_IMAGE = new ImageIcon(getClass().getResource("/blank.png"));` 

Обратите внимание, что NULL_IMAGE становится private final но не private static final.

+0

* «Перенесите свой PNG-образ в тот же пакет, что и ваш класс и попробуйте это: «* Придавая префикс'/', это будет работать, только если класс, вызывающий его, находится в пакете по умолчанию. –

+0

@AndrewThompson <это правильно :) –