Приложение не работает в заархивированном виде

По сути, я только что получил некоторые результаты по заданию, и мои результаты оказались ниже ожидаемых. Мне сказали, что при запуске приложения изображения нужно было перемещать, и возник ряд исключений:

Exception in thread "main" java.lang.NullPointerException
at uk.ac.aber.dcs.cs12420.aberpizza.gui.FrontGUI.getName(FrontGUI.java:494)
at sun.lwawt.macosx.CPlatformWindow.getInitialStyleBits(CPlatformWindow.java:271)
at sun.lwawt.macosx.CPlatformWindow.initialize(CPlatformWindow.java:228)

Ну, я много раз проверял, что исполняемый файл jar работает, прежде чем отправлять все. И я проверил еще раз сейчас, и это все еще так. Единственный раз, когда что-то не работает, это если я не извлекаю содержимое и не пытаюсь использовать исполняемый файл jar из заархивированной папки.

Я предполагаю, что это проблема, потому что изображения не появляются, и все просто не работает должным образом. Но как мне правильно использовать изображения при запуске jar из заархивированной папки?

Кстати, это вопрос, а не гнев. Я хотел бы знать, должно ли мое приложение работать без извлечения при использовании внешних изображений?

Просто небольшое редактирование: чтобы добавить к моему вопросу: как я могу заставить работать изображения, если исполняемый файл jar запускается непосредственно из zip-файла. т.е. как я могу сделать так, чтобы файлы/папки изображений перемещались с исполняемым файлом jar во временное место?


person DanMc    schedule 18.06.2012    source источник
comment
Вам не обязательно иметь возможность запускать программу из заархивированной папки, но вы должны корректно обрабатывать ошибку, а не просто создавать исключение NullPointerException.   -  person Tharwen    schedule 19.06.2012
comment
Мне никогда не приходило в голову, что его можно запустить без первоначального извлечения всего zip-документа, поскольку запуск из zip-папки, как известно, часто приводит к ошибкам. Однако вы очень правы, и в будущем я буду вспоминать об этом и обрабатывать возможные ошибки такого рода.   -  person DanMc    schedule 19.06.2012


Ответы (1)


На самом деле, запуск файла из заархивированной папки извлечет ваш файл во временную папку и запустит его оттуда. Если у вас есть другие файлы в архиве, от которых зависит ваше приложение, они могут не быть извлечены и, следовательно, вы получите сообщение об ошибке.

person Morfic    schedule 18.06.2012
comment
Если это так, что определяет, какие файлы будут извлечены? - person Greg Hewgill; 19.06.2012
comment
Ну, это зависит от приложения, которое выполняет распаковку, в вашем конкретном случае я доверяю ему ваш файловый менеджер/браузер MacOSX. - person Morfic; 19.06.2012
comment
Маркерная машина на самом деле. Я использую окна :p Спасибо за комментарий! - person DanMc; 19.06.2012
comment
В этом случае, старый добрый проводник Windows :) Он распаковывает файлы, к которым вы получаете доступ, прозрачным образом, чтобы облегчить ваш рабочий процесс. При этом можно принять это как должное и упустить из виду, что заархивированная папка, которую он просматривает, на самом деле не настоящая папка. - person Morfic; 19.06.2012
comment
Кстати, WinZip и другие инструменты имеют тот же эффект, если вы явно не распаковываете все. Они просто извлекают открываемый файл во временную папку. В вашем случае это сработало бы, если бы все ресурсы находились внутри основной банки. - person user845279; 19.06.2012
comment
@DanMc Что касается вашего более позднего редактирования, у вас нет возможности принудительно извлечь все ваши файлы при выполнении только файла при просмотре архива. Как сказал человек выше, лучший способ — включить ваши изображения в саму банку. Вот несколько советов, как это сделать: stackoverflow.com/questions/3076620/ - person Morfic; 19.06.2012