使用Eclipse远程调试JNLP应用程序

8

我正在调试一个jnlp应用程序,过去我可以通过eclipse远程调试它,但现在不能了。

启动它的命令是:

 /usr/java/jdk1.6.0_14/jre/bin/java -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1445 -Djnlpx.heapsize=64m,512m -DtrustProxy=true -Xverify:remote -Djava.security.policy=/lib/security/javaws.policy -Dfile.encoding=UTF-8 -Xbootclasspath/a:/usr/java/jdk1.6.0_14/jre/lib/deploy.jar:/usr/java/jdk1.6.0_14/jre/lib/javaws.jar:/usr/java/jdk1.6.0_14/jre/lib/plugin.jar -classpath /usr/java/jdk1.6.0_14/jre/lib/deploy.jar com.sun.javaws.Main launch.jnlp
Listening for transport dt_socket at address: 1445

问题在于当我连接eclipse调试器时,它会关闭并重新启动;因此调试器附加到第一个进程上;当该进程终止时,调试器也会停止。
实际上,调试器脚本并不重要;如果suspend=n,则在调试器启动之前,jnlp进程会自动重新启动。
我已经尝试过追踪它,但选项-XX:TraceSupport=true(以及我尝试过的其他变体)会导致jvm错误。
我正在使用fedora 11,Eclipse Java EE IDE for Web Developers。(Build id: 20090621-0832)
我想知道是否有人知道如何解决这个问题,或者至少如何打开更好的日志记录(即,捕获所有控制台输出到日志中;以便我可以查看在屏幕上闪现一毫秒的第一个控制台)。谢谢!
2个回答

4

这篇博客文章列出了您可以设置的环境变量以调试jnlp。我一直都是这样做的。

  set JAVAWS_TRACE_NATIVE=1

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

我已经找到了其中一个并尝试了一些标志; 我会继续努力并让人们知道结果;今天早上我发现了这篇帖子(http://forums.sun.com/thread.jspa?threadID=569693),我会继续努力。 - Jill
我也刚刚发现了这篇帖子:https://dev59.com/dnRB5IYBdhLWcg3wN1AQ - Jill

4

我的老板找到了答案:

似乎在jnlp文件中的“<property>”标签更加严格,特别是在新版本的JRE中。按照Sun文档的说法:

“对于不受信任的应用程序,只有在它们被认为是安全或属性名称以“jnlp。”或“javaws。”开头时,Java Web Start 才会设置 JNLP 文件中设置的系统属性。”

看起来不受信任的状态会导致应用程序使用合适的属性重新启动。

重新编译并修复了一个无关紧要的问题后,其中换行符导致签名APPLICATION.JNLP和launch.jnlp看起来不一样,调试器现在正常工作。


1
太好了!你的评论帮助我找到了自己的问题。看起来JNLP文件会根据不受信任的状态下载或解析两次。第二次使用的参数是在<jnlp href="link">中设置的参数。所以我需要将所有请求参数都添加到HREF中,现在终于可以工作了。谢谢。 - Kloe2378231

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接