JApplet в IE8 / JRE1.6.0_24 - исключение NullPointerException для getAppletContext () и JSObject.getWindow () - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть JApplet, который я загружаю с помощью JRE Plugin v 1.6.0_24 в IE8, и каждый раз, когда я пытаюсь использовать обратный вызов на веб-страницу (ala getAppletContext () или JSObject.getWindow ()), я получаюисключение.В принципе не похоже, что IE рассматривает мой JApplet как настоящий апплет из-за тега, может быть?Либо это, либо я делаю что-то не так в моем JApplet.

Вот тег HTML-объекта, который я использую для встраивания JApplet:

 <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

И исключение NullPointerException от getAppletContext ():

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;

}

NullPointerException on this.getAppletContext () .showDocument (url, "_self")

1 Ответ

3 голосов
/ 08 апреля 2011

Я сделаю некоторые предположения по симптомам.

У вас есть исключения NullPointerException в Applet.getParameter и Applet.getAppletContext().Оба эти метода получают AppletStub и вызывают методы этого объекта.Так что я думаю, что ваш AppletStub null.

Почему он может быть нулевым?Может быть нулевым, если ваш апплет не является апплетом верхнего уровня в браузере, но какой-то компонент помещен в другой апплет.Посмотрите на это.

...