代码之家  ›  专栏  ›  技术社区  ›  davr

Java Applet < > JavaScript通信的问题

  •  6
  • davr  · 技术社区  · 16 年前

    我很难让Java applet与applet托管的页面上的JavaScript代码通信。它有时会起作用,但有时会引发一个模糊的例外,Google没有提供任何有用的信息,除了一些从未解决的Java错误报告(谢谢Sun)。

    下面是我使用的代码:

    JSObject win = JSObject.getWindow(this);
    Object[] args = new Object[1];
    args[0] = "test argument";
    String result = (String) win.call("testJSfunc", args); // XXX
    

    这是我在标有//xxx的行上得到的例外情况。注意这是间歇性的。通常它是有效的,但有时它不是,使用相同的精确代码。重复加载页面会很快产生错误。

    netscape.javascript.JSException: No registered plugin for applet ID 1
        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 TestApplet.testCallJS(TestApplet.java:159)
        at TestApplet.init(TestApplet.java:139)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    

    我应该使用的Java和JavaScript之间还有更稳定的通信方式吗?

    ---更多信息---

    我正在使用Sun提供的deployjava.js脚本动态嵌入小程序。我确保启用了mayscript。我知道这不是Mayscript的问题,因为有些时候通信是有效的。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Zoidberg    16 年前

    确保在applet标记中有mayscript。

    <applet id="..." code="..." name=".." codebase="..." archive="..."  width="100%" height="100%" MAYSCRIPT>
    
        2
  •  1
  •   davr    16 年前

    我想我已经通过设置解决了这个问题 classloader_cache=false separate_jvm=true …一旦我设置了这两个选项,间歇性的模糊错误就不再发生了。希望这能永远解决问题。

        3
  •  0
  •   htomek    14 年前

    如果将SepleTyjJVM设置为true,这将对性能产生非常不利的影响,因为新的Java VM对于每个applet都是实例化的。如果页面上有多个小程序(30以上),则速度非常慢。

    我想知道这个问题还有没有其他的解决办法。例如,我们在多个选项卡上有多个小程序。打开带有小程序的第一个选项卡时,所有小程序都正确显示,没有问题。但是,切换到没有注册插件的任何其他标签结果。在IE中,不会发生此错误,因为在IE中,所有小程序在添加到DOM时都会立即实例化。