Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果启动了两个JVM,如何调试小程序?_Java_Debugging_Applet_Java Web Start - Fatal编程技术网

Java 如果启动了两个JVM,如何调试小程序?

Java 如果启动了两个JVM,如何调试小程序?,java,debugging,applet,java-web-start,Java,Debugging,Applet,Java Web Start,我需要通过打开浏览器窗口调试另一个java应用程序(webstart)启动的小程序。 它在较旧版本的java中运行良好,但在Java1.745中,调试只适用于第一个JVM(即webstart应用程序) 我在jcontrol中使用这些参数: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086 /usr/lib/jvm/java-7-oracle/jre/bin/java -Xmx512m -Xms128m -ag

我需要通过打开浏览器窗口调试另一个java应用程序(webstart)启动的小程序。 它在较旧版本的java中运行良好,但在Java1.745中,调试只适用于第一个JVM(即webstart应用程序)

我在jcontrol中使用这些参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
/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
....
我认为这没有什么问题,因为调试器连接正确。唯一的问题是,我只能调试webstart应用程序,而不能调试之后运行的小程序

在webstart应用程序和小程序的控制台中显示:

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
选项开始:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
/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
....
当我打开要从此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标记(我尝试了Xdebug和agentlib),但没有任何效果:

<param name="java_arguments" value="-Djnlp.packEnabled=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8087">
<> p>但我不认为这是一个解决方案,因为Apple TeVIEW不与PAC200一起工作,我必须向服务器添加重复的库。 是否有可能:

  • 为webstart应用程序和插件定义单独的jdwp端口
  • 在同一端口上侦听这两个端口
  • 选择调试将用于哪一个

  • 我在Linux上使用64位oracle JDK 1.7.0_45-b18和64位Firefox

    这不是一个真正的解决方案,但我的问题有解决办法

    • 清除jcontrol中的java参数
    • 启动webstart应用程序
    • 再次添加java参数
    • 运行小程序
    之后,参数只传递给applet,调试工作正常