6

我无法让 Java Applet 与托管小程序的页面上的 Javascript 代码进行通信。它有时可以工作,但有时它会抛出一个晦涩的异常,除了一些从未解决的 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 的问题,因为通信有时会起作用。

4

3 回答 3

1

确保您的小程序标签中有 MAYSCRIPT。

<applet id="..." code="..." name=".." codebase="..." archive="..."  width="100%" height="100%" MAYSCRIPT>
于 2010-03-22T19:38:52.793 回答
1

我想我已经通过设置解决了这个问题classloader_cache=false......separate_jvm=true一旦我设置了这两个,间歇性的模糊错误就停止发生了。希望这可以永久解决问题。

于 2010-06-07T15:54:10.123 回答
0

如果将separate_jvm 设置为true,这会对性能产生非常糟糕的影响,因为新的Java VM 会为每个applet 实例化。如果页面上有多个小程序(30+),这会很慢。

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

于 2012-02-13T06:11:51.573 回答