#jar #java-web-start #jnlp
#jar #java-web-start #jnlp
Вопрос:
Я пытаюсь изменить приложение, которое было развернуто с помощью JNLP на моем компьютере. Однако, когда я пытаюсь заменить JAR существующего приложения на мой новый jar, он не выполняет поиск javax.jnlp.SingleInstanceService
и javax.jnlp.BasicService
.
Я уже подписал основной файл JAR своей собственной парой ключей (не оригинальной), но он по-прежнему не работает.
Следующие две строки выдают UnavailableServiceException
(неинициализированные).
BasicService lookup = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
SingleInstanceService singleInstanceService = (SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService");
В неизмененном JAR (с которым выполняется java.exe -cp SomeJar.jar
) исключения не генерируются. Я уверен, что это проблема с подписью, поскольку даже у отправленного в отставку файла без каких-либо других изменений все еще есть эта проблема.
Могу ли я каким-либо образом воспроизвести это в моем измененном JAR (возможно, добавив его сертификат хранилища ключей в какой-либо файл)?
Ответ №1:
Проблема не в подписи jar. Чтобы использовать JNLP API, вы должны запустить свой jar через файл jnlp.
Синтаксис для запуска файла jnlp: javaws your_jnlp_file
Ваш jar должен быть зарегистрирован в контейнере ресурсов внутри вашего файла jnlp, и ваш jar должен быть развернут как часть вашего веб-приложения. Вы запускаете свой jar как стандартный jar. Причина, по которой старый jar не привел к ошибке, скорее всего, потому, что он просто обработал исключение UnavailableServiceException.