设置要用于applet启动的默认JVM参数
我正在尝试远程调试Java applet,但我似乎无法使-agentlib:jdwp JVM参数工作。 我已经尝试在Java控制面板中为所使用的特定JRE指定它,我尝试通过用于启动applet的JNLP文件来设置它。
为applet启动设置JVM参数的正确方法是什么? 特别是远程调试。
看一个类似的SO问题 ,我找到了以下答案……
有时为了调试一些安全相关的东西,浏览器插件环境与appletviewer太不同了。 以下是在浏览器中有效调试applet的方法:
1)获取二进制文件的调试信息
从JRE_HOME / lib备份.jar文件
(下载并)安装与JRE相同版本的JDK。
将.jar文件从JDK_HOME / jre / lib复制到JRE_HOME / lib
JDK中的文件是使用包含的调试信息(源代码行号信息,变量名等)编译的,而JRE文件没有此信息。
如果没有这个,你将无法在调试器中有意义地进入核心类代码。
2)启用Java Plug-in的调试
转到Java控制面板/ Java / Java运行时设置/视图/用户/运行时参数
并添加选项以启用调试。 像这样的东西:
-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n
有趣的选项是端口(在这里使用2502,你可以使用几乎任何自由端口,只需将其写下来以供以后使用)和暂停 – 如果你需要调试applet启动,类加载等,将其设置为“y” 。 这样,当您访问applet页面时,浏览器似乎会冻结,因为JVM会立即暂停,等待调试器连接。
3)使用您喜欢的IDE远程调试Java插件
例如,在Eclipse中,选择Run / Debug Configurations … / Remote Java Application
单击“新建”按钮。
确保连接类型为“Socket Attach”,如果您的浏览器是本地的,则选择localhost作为主机,并选择您之前选择的端口(示例中为2502)。
您可能必须在源选项卡上的JDK中包含src.zip以使Java核心类源可用。
保存配置,一旦浏览器运行插件(JVM挂起或未挂起),运行远程调试器连接到插件JVM,并打开包含applet源的项目。
此问题已针对7_u40修复,可在java.net上进行早期访问。 否则Oracle错误说这是针对Java 8修复的!
你绝对需要在浏览器中运行applet吗? 因为调试applet的常规方法是使用appletviewer 。
根据JPDA文档(我假设您已经阅读过,基于您已经尝试过的内容),您应该能够在Java控制面板中指定代理。 我从来没有尝试过这个,并且文档声称你不能以这种方式中断applet启动(只需附加到正在运行的applet),所以我所能做的就是祝你好运。
我有一个解决方法。 看起来JRE7_u21没有打开端口,也没有挂起,jconsole VM摘要没有显示Java控制面板中配置的VM参数。
我降级到JRE7_u17,一切正常。 Java控制面板中的我的VM参数字符串是:
-agentlib:jdwp=transport=dt_socket,address=8889,server=y,suspend=y,quiet=n,timeout=10000
它似乎没有
-Djava.compiler=NONE
没有其他工作,甚至没有像以前建议的那样替换lib文件夹。 我甚至试过一些注册表黑客攻击(改变路径)。
您可以使用JAVA_TOOL_OPTIONS环境变量来传递默认的JVM参数。 它会将params传递给在浏览器中运行的applet(而不仅仅是applet)。 这种方法甚至可以在java 7u21及更高版本上运行。
- 有没有办法从applet本身重新加载/刷新java applet?
- 如何使用SwingExplorer导航Applet内容?
- “安全设置阻止的应用程序”阻止在Linux上使用oracle SE 7更新51运行的applet
- 如何(简单地)从java生成POST http请求来进行文件上传
- Maven / Java8 build中的编译错误:找不到符号JSObject.getWindow
- 如何从javascript调用applet中声明的方法
- 是否可以制作JavaFX Web applet?
- 使用applet加载.DLL并在客户端上使用它
- 尝试嵌入applet时java.lang.NoClassDefFoundError