本文正在参加「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:
复制代码