Java IE8/JRE1.6.0_24中的JApplet——getAppletContext()上的NullPointerException;JSObject.getWindow()

Java IE8/JRE1.6.0_24中的JApplet——getAppletContext()上的NullPointerException;JSObject.getWindow(),java,html,applet,nullpointerexception,Java,Html,Applet,Nullpointerexception,我有一个JApplet,我正在用IE8中的JRE插件v1.6.024加载,每当我尝试使用对网页的回调(ala getAppletContext()或JSObject.getWindow())时,我都会遇到一个异常。基本上,IE似乎并没有因为标签而把我的JApplet当作一个实际的小程序?要么是这样,要么是我在日本做了错事 下面是我用来嵌入JApplet的HTML对象标记: <object codetype="application/java" classid="clsid:C

我有一个JApplet,我正在用IE8中的JRE插件v1.6.024加载,每当我尝试使用对网页的回调(ala getAppletContext()或JSObject.getWindow())时,我都会遇到一个异常。基本上,IE似乎并没有因为标签而把我的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>
以及getAppletContext()中的NullPointerException:

所以在我的小程序中,显然我在扩展javax.swing.JApplet并重写init()。我的回调发生在鼠标释放事件上(由异常证明)

我在这件事上被难住了。另外,仅供参考——我不想从命令行运行它,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;
}


这个.getAppletContext().showDocument(url,“\u self”)

上的NullPointerException。我将根据症状进行一些猜测

Applet.getParameter
Applet.getAppletContext()
中存在NullPointerException。这两个方法都获取AppletStub并调用此对象的方法。我猜你的AppletStub是
null


为什么它可以是空的?如果您的小程序不是浏览器中的顶级小程序,而是放在另一个小程序中的某个组件,则可以为null。看看这个。

与其问“2019是哪一行appletImageMgt.java?”,我建议您准备并发布一个。请注意,第一个“s”表示2019年附近不会出现任何例外情况。SSCCE应该可以在100行代码内实现(可能只有40行)。另外请注意,如果您坚持使用类、方法和属性的通用术语,其他人将更容易理解您的代码。这意味着
AllWordsUpperCase
用于类名,
firstWordLowerCase
用于方法和属性,而
用于常量。你和安德鲁·汤普森是同一个人吗?你也提到了SSCE!:)克里斯,你在Firefox或Chrome上看到同样的问题了吗?标记不会在FF中呈现,因为它是一个仅用于IE的应用程序,所以没有在Chrome中测试过。@Andrew Thompson--添加了一个SSCE。有趣的是,我在这个应用程序上没有发现异常。我不确定另一个小程序的问题是什么,因为它在浏览器中运行得很好--它不允许我获取上下文。这正是问题所在--尽管不是您描述的原因。似乎出于某种原因,NetBeans GUI编辑器在my.form中添加了以下内容:这又导致NetBeans在我的initComponents()方法中添加了以下行:setStub(null);手动删除了记事本中的两个条目,奇迹般地我有了工作代码。我被错误的原因弄晕了。我不会怀疑即使是NetBeans*也会那么愚蠢。(*在看到NetBeans生成的无效JNLP文件后,我对它的评价很低。)@Chris arrg!同样的问题也出现在netbeans 7.1上。让我放松了一天的工作。对getProperty的任何al调用都会引发nullpointer异常。Netbeans在initComponents部分自动生成一个“setStub(null);”。
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)
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();
    }
}
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;