Изменение уже установленного приложения JNLP

#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.