如何在Java Web Start(JNLP)下debugging应用程序?
我知道如何使用Eclipsedebugging远程Java VM,但是如何使用Java Web Start程序来完成。 我有一个问题,只发生在Java Web Start中。 它必须是安全相关的。
我需要一个解决scheme,可以使用当前的Java VM,如1.6.0_12。
这与您想要远程debugging的任何其他Java进程完全相同:您必须为VM设置一些参数( -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345
)然后连接到给定的端口。 在Java webstart 6.0中,可以通过环境variablesJAVAWS_VM_ARGS在早期版本中使用-J选项来完成。 在这里看到细节。
手动启动JWS VM。 这样你可以提供启动参数来打开debugging端口。 这是一个描述 ,它是这样的:
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
至于较新版本的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
开始显示在控制台输出中。
我唯一的解决scheme是将这些parameter passing给JAVA_TOOL_OPTIONS系统variables。
您还可以使用-J选项将debugging参数提供给javaws可执行文件
例:
javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
你有没有尝试打印debugging日志? 无论如何,这是一件有用的事情,在这种情况下可能会有所帮助。
如果你想真正的debugging,请参阅例如这里: 我怎样才能在WebStart下debugging?
在Java 8和Windows 10中,打开命令提示符(cmd.exe)并input:
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
要在Linux中debuggingWeb Start应用程序,请在debugging模式下使用javaws调用创build一个shell脚本〜/ bin / javaws-debug.sh,如上所述:
〜/斌/ 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 "$@"
然后,在浏览器中,select该脚本作为要在jnlp文件上调用的应用程序。
例如,在Firefox中,转到编辑→首选项→应用程序,内容types:Java Web Start,然后在操作中select“使用其他”,然后从“select帮助程序应用程序”对话框中select脚本。 在Chrome中,您需要更改Linux系统设置。 在KDE中,进入系统设置→文件关联,已知types:application:x-java -jnlp-file,添加一个新的应用程序,从“Choose application for application / x-java”中select〜/ bin / javaws-debug.sh -jnlp-file“对话框。
一旦你的浏览器被configuration,Java Web Start应用程序将开始使用你的包装器,这将使debugging器连接到端口8989。
您将需要执行以下操作:
-
在Java控制面板>高级中启用Java日志和跟踪。
-
启用debuggingJava的参数(可选,但有用的问题,如tls / ssl握手作为close_notify或handshake_failure)并启动JNLP,有两种方法可以做到这一点:
2.A. 下载JNLP文件并从命令行执行(在这种情况下不需要
SET
命令)。set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all javaws -wait jnlp.jnlp
2.B. 在Java控制面板> Java>视图中为JVM添加参数(即
-Djavax.net.debug=all
)(这不是必需的),并从浏览器启动JNLP文件: -
日志和跟踪位于Java Deployment Home的
log
目录中,粘贴这些位置的位置:一个。 Windows XP:
%HOME%\Application Data\Sun\Java\Deployment
湾 Windows 7 / Vista:
%APPDATA%\..\LocalLow\Sun\Java\Deployment
C。 Linux / Solaris:
%HOME%/.java/deployment
使用javax.net.debug =如果jnlp中的jar从https连接加载,您将看到握手。 这类问题很难debugging。
... %% 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: