8.2 如何在Java Web Start(JNLP)下调试应用程序? | Java Debug 笔记

592 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:如何在Java Web Start(JNLP)下调试应用程序?

我知道如何使用Eclipse调试远程Java VM,但是不知道如何使用Java Web Start程序进行调试。

我需要一个可以与当前Java VM(如1.6.0_12)一起使用的解决方案

回答1:

与要远程调试的任何其他Java进程完全相同:您必须为VM(-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:

您将需要执行以下操作:

1, 在Java控制面板>高级中启用Java日志和跟踪。

2, 启用用于调试Java的参数(非必选但但在一些时候有用,即tls / ssl握手问题如close_notify或handshake_failure)并启动JNLP,您可以通过两种方式进行操作:

2a,下载JNLP文件并从命令行执行它

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

2b,在Java控制面板> Java>视图中为JVM添加参数(即-Djavax.net.debug = all)(在此特定情况下不需要),然后从浏览器启动JNLP文件:

3,日志在log文件夹中,

...
%% 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: