嵌入在 HTML 中的 Java Applet 导致 InvocationTargetException
Posted
技术标签:
【中文标题】嵌入在 HTML 中的 Java Applet 导致 InvocationTargetException【英文标题】:Java Applet Embedded in HTML Causes InvocationTargetException 【发布时间】:2014-03-05 06:41:20 【问题描述】:我有以下 html 用于嵌入我的 Java 小程序:
<applet code="MyClass" URL="path/MyClass.class" ></applet>
小程序不起作用,我在控制台中收到以下错误:
java.lang.reflect.InvocationTargetException 在 com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116) 在 sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3606) 在 sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3131) 在 sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1517) 在 java.lang.Thread.run(Thread.java:680) 原因:java.lang.ClassCastException:MyClass 无法转换为 java.applet.Applet 在 sun.plugin2.applet.Plugin2Manager$13.run(Plugin2Manager.java:3119) 在 java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715) 在 java.awt.EventQueue.access$400(EventQueue.java:82) 在 java.awt.EventQueue$2.run(EventQueue.java:676) 在 java.awt.EventQueue$2.run(EventQueue.java:674) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:690) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:687) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 异常:java.lang.reflect.InvocationTargetException
这是什么原因造成的?
感谢您的帮助。
【问题讨论】:
【参考方案1】:我看到了你的错误:
Caused by: java.lang.ClassCastException: MyClass cannot be cast to java.applet.Applet
可能是 JVM 插件没有正确加载你的类,我认为你必须使用 archive 参数而不是 URL 来指定小程序类的路径, 如果是 code 参数中的情况,您必须指定完整路径 mypackage.MyClass,并确保您的小程序主类扩展 javax.swing.JApplet 或 java.applet.Applet。
另外我建议您使用
希望对你有帮助,
【讨论】:
感谢您的回复! :) 我有两个问题。首先 javax.swing.JApplet 和 java.applet.Applet 有什么区别,我应该使用哪一个?其次,是否只有主类必须是 javax.swing.JApplet 或 java.applet.Applet 的扩展?还是所有的支持类? 您好,只有主类必须是 javax.swing.JApplet 或 java.applet.Applet 的扩展。 JApplet 是 Applet 的扩展,它使您能够使用 Swing 组件。 JApplet 也是较新的课程。这是一个示例,您可以在其中找到如何使用 JApplet 定义小程序子类:docs.oracle.com/javase/tutorial/deployment/applet/subclass.html以上是关于嵌入在 HTML 中的 Java Applet 导致 InvocationTargetException的主要内容,如果未能解决你的问题,请参考以下文章
有Java编写一个输出“Hello world!”的Applet 程序和嵌入该Applet的HYML页面
将Java Applet迁移到Java WebStart(JNLP)