我需要通过打开浏览器窗口调试由另一个java应用程序(webstart)启动的applet。 它适用于旧版本的java,但是对于Java 1.7_45,调试仅适用于第一个JVM(即webstart应用程序)。
我在jcontrol中使用这些参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
我认为这没有错,因为调试器正确连接。唯一的问题是,我只能调试webstart应用程序而不是之后运行的applet。
在webstart应用程序和applet的控制台中显示:
Java Plug-in 10.45.2.18
Using JRE version
1.7.0_45-b18 Java HotSpot(TM) 64-Bit Server VM
JNLP java进程以我在jcontrol中设置的agentlib
选项开头:
/usr/lib/jvm/java-7-oracle/jre/bin/java -Xmx512m -Xms128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
-Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar
-classpath /usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar
-Djnlpx.vmargs="-Xmx512m -Xms128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086"
-Djnlpx.jvm=/usr/lib/jvm/java-7-oracle/jre/bin/java
....
当我打开applet时,我想从这个webstart应用程序进行调试,打开firefox中的新选项卡并启动三个进程:
/opt/firefox/plugin-container /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 13665 true plugin
/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8315888593 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.6946726655044877700.AF_UNIX
/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8317712180 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Djnlpx.session.data=/tmp/session6916520025949955515 -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.3102318208570708149.AF_UNIX
如您所见,调试端口不作为参数传递给执行applet的命令
我试图在applet标签中添加新的调试参数(我已尝试过Xdebug和agentlib),但它什么也没做:
<param name="java_arguments" value="-Djnlp.packEnabled=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8087">
我也试过使用appletviewer,在解决了pack200库的问题后,我坚持这个例外:
java.lang.NoClassDefFoundError: netscape/javascript/JSException
at java.lang.Class.getDeclaredConstructors0(Native Method)
但我不认为这是一个解决方案,因为appletviewer不能与pack200一起工作,我必须将重复的库添加到服务器。
以某种方式可能:
我在Linux上使用64位oracle JDK 1.7.0_45-b18和64位Firefox。
答案 0 :(得分:1)
不是真正的解决方案,但我的问题有一个解决方法。
之后,参数仅传递给applet,调试工作。