Я испытываю затруднения, заставляя Апплет Java общаться с кодом JavaScript на странице, на которой размещается апплет. Это иногда работает, но othertimes, для которого это выдает неясное исключение, тот поиск с помощью 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, который я должен использовать?
---Больше информации---
Я использую deployJava.js сценарий в соответствии с Sun для встраивания апплета на лету. Я удостоверился, что MAYSCRIPT включен. Я знаю, что это не проблема с MAYSCRIPT, потому что коммуникация работает часть времени.
Я думаю, что решил проблему, установив classloader_cache=false
и separate_jvm=true
. ...как только я установил оба этих параметра, периодические непонятные ошибки прекратились. Надеюсь, это решит проблему навсегда.
Убедитесь, что у вас есть MAYSCRIPT в теге вашего апплета.
<applet id="..." code="..." name=".." codebase="..." archive="..." width="100%" height="100%" MAYSCRIPT>