Подтвердить что ты не робот

Как я могу отлаживать приложения в Java Web Start (JNLP)?

Я знаю, как я могу отлаживать удаленную виртуальную виртуальную машину Java с помощью Eclipse, но как это сделать с помощью программы Java Web Start. У меня проблема, которая возникает только в Java Web Start. Это должно быть связано с безопасностью.

Мне нужно решение, которое будет работать с текущей виртуальной машиной Java, например 1.6.0_12.

4b9b3361

Ответ 1

Это точно так же, как и с любым другим Java-процессом, который вы хотите удаленно отлаживать: вам нужно установить некоторые аргументы для виртуальной машины (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 ) и затем подключиться к данному порту. В Java Webstart 6.0 это можно сделать с помощью опции -J, в более ранней версии через переменную среды JAVAWS_VM_ARGS. Подробнее здесь.

Ответ 2

Запустите JWS VM вручную. Таким образом вы можете предоставить параметры запуска, чтобы открыть порт отладки. Вот описание , оно выглядит следующим образом:

set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws http://server:port/descriptor.jnlp

Ответ 3

Что касается более новых версий Java (Java 8u20 + и Java 7u70 +), я понял, что параметры, такие как -Xrunjdwp, не могут передаваться напрямую или не использовать JAVAWS_VM_ARGS. Сообщение Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 начал отображаться на консольном выходе.

Единственное решение, которое сработало для меня, это передать эти аргументы в системную переменную JAVA_TOOL_OPTIONS.

Ответ 4

Вы также можете указать параметр debug для исполняемого файла javaws с использованием опции -J

Пример:

javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp

Ответ 5

Вам нужно будет сделать следующее:

  • Включить журналы и трассировку Java в панели управления Java > Дополнительно. Панель управления Java: журналы и трассировка

  • Включить параметры для отладки Java (необязательные, но полезные, то есть проблемы с tls/ssl handshake как close_notify или handshake_failure) и запуск JNLP, есть два способа сделать это:

    2.а. Загрузите файл JNLP и выполните его из командной строки (команда SET не требуется в данном конкретном случае).

    set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all
    javaws -wait jnlp.jnlp
    

    2б. Добавьте аргументы (т.е. -Djavax.net.debug=all) для JVM в панели управления Java > Java > View (этого не требуется в этом конкретном) и запустите JNLP файл из браузера:

    Панель управления Java: аргументы jvm

  • Журналы и трассы расположены в каталоге log из Java Deployment Home, откуда я вставляю эти места:

    а. Windows XP: %HOME%\Application Data\Sun\Java\Deployment

    б. Windows 7/Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    с. Linux/Solaris: %HOME%/.java/deployment

С javax.net.debug = все вы увидите рукопожатие, если jar внутри jnlp загружается из https-соединения. Такие проблемы трудно отлаживать.

...
%% No cached client session
*** ClientHello, TLSv1.2
...
***
... 
Java Web Start Main Thread, received EOFException: error
Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Java Web Start Main Thread, SEND TLSv1.2 ALERT:  fatal, description = handshake_failure
Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2
Java Web Start Main Thread, called closeSocket()
#### Java Web Start Error:

Ответ 6

Чтобы отладить приложение Web Start в Linux, создайте оболочку script ~/bin/javaws-debug.sh с вызовом javaws в режиме отладки, как описано выше:

~/bin/javaws-debug.sh:

#!/bin/sh
export JAVAWS_TRACE_NATIVE=1
export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE 
  -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws "[email protected]"

Затем в вашем браузере выберите script как приложение для вызова в файлах jnlp.

Например, в Firefox перейдите в "Редактировать" → "Настройки" → "Приложения", "Тип контента: Java Web Start" и выберите "Использовать другое" в действии и выберите script в диалоговом окне "Выбор вспомогательного приложения". В Chrome вам нужно изменить настройки системы Linux. В KDE перейдите в раздел "Системные настройки" → "Ассоциации файлов", "Известные типы": приложение: x-java-jnlp файл, добавьте новое приложение, выберите ~/bin/javaws-debug.sh из "Выберите приложение для приложения /x -java -jnlp-file".

После настройки вашего браузера приложение Java Web Start начнет использовать вашу оболочку, что позволит отладчику подключиться к порту 8989.

Ответ 7

С помощью Java 8 и Windows 10 откройте командную строку (cmd.exe) и введите следующее:

set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
javaws java-app.jnlp

Ответ 8

Пробовали ли вы печатать журнал отладки? Это полезная вещь, которая должна быть во всяком случае, и может помочь в этом случае.

Если вам нужна настоящая отладка, см., например, Вот: Как отлаживать в WebStart?

Ответ 9

Вы можете запустить JNLP с включенной отладкой:

javaws -Xnosplash -J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5009 <application>.jnlp

Выход: Прослушивание транспорта dt_socket по адресу: 5009

Прикрепите к этому с вашей любимой IDE, я использую IntelliJ IDEA Выполнить> Присоединить к процессу