我有一个 JApplet,正在 IE8 中使用 JRE 插件 v 1.6.0_24 加载,并且任何时候我尝试使用网页回调(ala getAppletContext() 或 JSObject.getWindow())时,我都会收到异常(exception)。基本上,IE 似乎并没有将我的 JApplet 视为实际的小程序,可能是因为标签的原因?要么是这样,要么是我在 JApplet 中做错了什么。
这是我用来嵌入 JApplet 的 HTML 对象标记:
<object codetype="application/java"
classid="clsid:CAFEEFAC-0016-0000-0024-ABCDEFFEDCBA"
codebase="http://java.sun.com/update/1.6.0/jinstall-6u24-windows-i586.cab"
width="640"
height="480"
id="ImageEdit">
<param name="code" value="my.imaging.test.class"/>
<param name="codebase" value="/folder/" />
<param name="type" value="application/x-java-applet;jpi-version=1.6.0_24" />
<param name="cache_archive" value="test.jar, jai_core.jar, jai_codec.jar,
mlibwrapper_jai.jar, axis.jar, jaxrpc.jar,
jbig2.jar, PDFRenderer.jar"/>
<param name="cache_version" value="1.0.2.F, 1.1.3, 1.1.3, 1.1.3,
1.0, 1.0, 1.0, 1.0"/>
<param name="cache_archive_ex" value="test.jar;preload;1.0.2.F"/>
<param name="cache_option" value="Plugin"/>
<param name="scriptable" value="true"/>
<param name="mayscript" value="true"/>
</object>
这是 JSException 之一的相关部分:
Exception in thread "AWT-EventQueue-4" netscape.javascript.JSException
at netscape.javascript.JSObject.getWindow(Unknown Source)
at my.imaging.test.lblLoadPageMouseReleased(test.java:2180)
at my.imaging.test.access$6600(test.java:74)
at my.imaging.test$15.mouseReleased(test.java:1621)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)...
Caused by: java.lang.NullPointerException
at java.applet.Applet.getParameter(Unknown Source)
... 35 more
以及来自 getAppletContext() 的 NullPointerException:
java.lang.NullPointerException
at java.applet.Applet.getAppletContext(Unknown Source)
at my.imaging.test.lblCloseMouseReleased(test.java:2019)
at my.imaging.test.access$6600(test.java:74)
at my.imaging.test$15.mouseReleased(test.java:1621)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
所以在我的小程序中,显然我正在扩展 javax.swing.JApplet 并重写 init()。我的回调发生在鼠标释放事件上(如异常所示)。
private void lblLoadPageMouseReleased(java.awt.event.MouseEvent evt) {
JSObject window = null;
URL url = null;
try {
url = new URL("http://127.0.0.1/folder/newpage.html");
if (imageList.size() > 0) {
if (JOptionPane.showConfirmDialog(rootPane, "Are you sure?",
"Question", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, infoIcon) == JOptionPane.OK_OPTION)
{
this.getAppletContext().showDocument(url, "_self");
}
} else {
window = JSObject.getWindow(this);
window.eval("nextPage()");
}
} catch(JSException jse){
jse.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
我被这个问题难住了。另外,仅供引用 - 我不想从命令行运行它,并且plugin.jar位于我的类路径中。任何关于我做错了什么的想法将不胜感激......谢谢!
编辑:下面的 SSCCE
public class NewJApplet extends javax.swing.JApplet {
/** Initializes the applet NewJApplet */
@Override
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private void initComponents() {
btnDo = new javax.swing.JButton();
btnDo.setText("Do Something");
btnDo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnDoActionPerformed(evt);
}
});
this.getContentPane().add(btnDo);
}
private void btnDoActionPerformed(java.awt.event.ActionEvent evt) {
URL url = null;
try {
url = new URL("http://127.0.0.1/folder/newpage.html");
this.getAppletContext().showDocument(url, "_self");
} catch (Exception e) {
e.printStackTrace();
}
}
private javax.swing.JButton btnDo;
}
this.getAppletContext().showDocument(url, "_self") 上出现 NullPointerException
最佳答案
我会根据症状进行一些猜测。
Applet.getParameter
和 Applet.getAppletContext()
中出现 NullPointerExceptions。这两个方法都获取 AppletStub 并调用该对象的方法。所以我的猜测是你的 AppletStub 是 null
。
为什么可以为空?如果您的 Applet 不是浏览器中的顶级 Applet,而是放置在另一个 Applet 中的某个组件,则它可以为 null。看看这个。
关于java - IE8/JRE1.6.0_24 中的 JApplet -- getAppletContext() 和 JSObject.getWindow() 上的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588607/