从小程序调用javascript方法时出错 [英] Error when calling javascript method from applet

查看:22
本文介绍了从小程序调用javascript方法时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 netscapte.java.JSObject 从 Applet 调用 javascript 方法.

在小程序中:

JSObject window = JSObject.getWindow(this.Class);Object[] args = ....//参数window.call("javascriptMethodName", args);

但我在 window.call 得到异常:

<前>调用callFromJava"时出现 JavaScript 错误netscape.javascript.JSException:调用callFromJava"时出现 JavaScript 错误在 sun.plugin2.main.client.MessagePassingJSObject.newJSException(未知来源)在 sun.plugin2.main.client.MessagePassingJSObject.waitForReply(来源不明)在 sun.plugin2.main.client.MessagePassingJSObject.call(来源不明)在 TextBoxApplet.jButton1_actionPerformed(TextBoxApplet.java:57)在 TextBoxApplet.access$000(TextBoxApplet.java:16)在 TextBoxApplet$1.actionPerformed(TextBoxApplet.java:36)在 javax.swing.AbstractButton.fireActionPerformed(来源不明)在 javax.swing.AbstractButton$Handler.actionPerformed(来源不明)在 javax.swing.DefaultButtonModel.fireActionPerformed(来源不明)在 javax.swing.DefaultButtonModel.setPressed(未知来源)在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(来源不明)在 java.awt.Component.processMouseEvent(Unknown Source)在 javax.swing.JComponent.processMouseEvent(来源不明)在 java.awt.Component.processEvent(来源不明)在 java.awt.Container.processEvent(来源不明)在 java.awt.Component.dispatchEventImpl(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(来源不明)在 java.awt.LightweightDispatcher.retargetMouseEvent(来源不明)在 java.awt.LightweightDispatcher.processMouseEvent(来源不明)在 java.awt.LightweightDispatcher.dispatchEvent(来源不明)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(来源不明)在 java.awt.EventQueue.dispatchEvent(来源不明)在 java.awt.EventDispatchThread.pumpOneEventForFilters(来源不明)在 java.awt.EventDispatchThread.pumpEventsForFilter(来源不明)在 java.awt.EventDispatchThread.pumpEventsForHierarchy(来源不明)在 java.awt.EventDispatchThread.pumpEvents(来源不明)在 java.awt.EventDispatchThread.pumpEvents(来源不明)在 java.awt.EventDispatchThread.run(未知来源)

JSObject 不是 null.有没有人遇到过这个?非常感谢.

解决方案

我做了一个快速测试,我的发现与 musicfreak 的评论.

使用以下小程序:

public class MyClass extends JApplet {公共无效初始化(){JSObject 窗口 = JSObject.getWindow(this);Object[] args = new String[] { "bar" };window.call("foo", args);}}

和以下标记(注意错误的 JavaScript - 在我传递的 bar 参数中没有 baz 方法):

<头><title>MyAppletTest</title><身体><script type="text/javascript">函数 foo(bar) { bar.baz();}<applet 代码="MyApplet.class"></applet>

我收到错误:

netscape.javascript.JSException:调用foo"时出现 JavaScript 错误在 sun.plugin2.main.client.MessagePassingJSObject.newJSException(未知来源)在 sun.plugin2.main.client.MessagePassingJSObject.waitForReply(来源不明)在 sun.plugin2.main.client.MessagePassingJSObject.call(来源不明)在 MyApplet.init(MyApplet.java:13)

例如,如果我通过将 bar.baz() 替换为 alert(bar) 来修复我的 JavaScript 函数,则一切正常.

长话短说 - 再看看您尝试调用的 JavaScript 函数,以及您的 Applet 随调用传递的参数.

I am trying to call javascript method from an Applet using netscapte.java.JSObject.

in the applet:

JSObject window = JSObject.getWindow(this.Class); 
Object[] args = ....  //arguments 
window.call("javascriptMethodName", args); 

But I get the exception at window.call:

JavaScript error while calling "callFromJava"
netscape.javascript.JSException: JavaScript error while calling "callFromJava"
    at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source)
    at TextBoxApplet.jButton1_actionPerformed(TextBoxApplet.java:57)
    at TextBoxApplet.access$000(TextBoxApplet.java:16)
    at TextBoxApplet$1.actionPerformed(TextBoxApplet.java:36)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

The JSObject is NOT null. Have anyone encountered this ? Thanks a lot.

解决方案

I did a quick test and my findings correlate well with musicfreak's comment.

With the following Applet:

public class MyClass extends JApplet {
    public void init() {
        JSObject window = JSObject.getWindow(this); 
        Object[] args = new String[] { "bar" }; 
        window.call("foo", args); 
    }
}

and the following markup (notice the erroneous JavaScript - there's no baz method in the bar argument I'm passing):

<html>
  <head>
    <title>MyAppletTest</title>
  </head>
  <body>
    <script type="text/javascript">
      function foo(bar) { bar.baz(); }
    </script>
    <applet code="MyApplet.class"></applet>
  </body>
</html>

I get the error:

netscape.javascript.JSException: JavaScript error while calling "foo"
    at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source)
    at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source)
    at MyApplet.init(MyApplet.java:13)

If I fix my JavaScript function by replacing bar.baz() with alert(bar) for example, everything works fine.

Long story short - take another look at the JavaScript function you are trying to call, as well as the parameters your Applet passes with the call.

这篇关于从小程序调用javascript方法时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆