Проблема с Java-апплетом <-> связь с Javascript - PullRequest
6 голосов
/ 22 марта 2010

У меня проблемы с получением Java-апплета для связи с кодом 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, который я должен использовать?

--- Подробнее ---

Я использую сценарий deployJava.js, предоставленный Sun, для встраивания апплета на лету. Я убедился, что MAYSCRIPT включен. Я знаю, что это не проблема с MAYSCRIPT, потому что связь работает иногда.

Ответы [ 3 ]

1 голос
/ 07 июня 2010

Я думаю, что я решил проблему, установив classloader_cache=false и separate_jvm=true ... как только я установил оба этих параметра, прерывистые скрытые ошибки перестали происходить. Надеюсь, это решит проблему навсегда.

1 голос
/ 22 марта 2010

Убедитесь, что в вашем теге апплета есть MAYSCRIPT.

<applet id="..." code="..." name=".." codebase="..." archive="..."  width="100%" height="100%" MAYSCRIPT>
0 голосов
/ 13 февраля 2012

Если вы установили значение Отдельное_jvm в true, это очень плохо скажется на производительности, поскольку для каждого апплета создается новая виртуальная машина Java.Если у вас есть несколько апплетов на странице (30+), это довольно медленно.

Интересно, есть ли другое решение для этой проблемы.Например, у нас есть несколько апплетов на нескольких вкладках.Когда открывается первая вкладка с апплетами, все апплеты отображаются правильно, без проблем.Но, переключитесь на любую другую вкладку результатов с ошибкой для не зарегистрированного плагина.В IE эта ошибка не возникает, потому что в IE все апплеты создаются сразу после их добавления в DOM.

...