Есть ли способ перезагрузить / обновить Java-апплет из самого апплета? - PullRequest
2 голосов
/ 26 июня 2009

У меня есть кнопка на моем апплете (содержащаяся в браузере), которую я хотел бы перезагрузить или обновить весь апплет одним из двух способов:

  1. Обновление самого апплета без необходимости обновления браузера
  2. Обновить весь браузер

Возможно ли это из апплета?

Ответы [ 2 ]

3 голосов
/ 26 июня 2009

Используйте метод AppletContext.showDocument (...):

applet.getAppletContext().showDocument(applet.getDocumentBase(), "_self")

Это загрузит документ, содержащий апплет, в том же окне / фрейме, в котором апплет уже загружен.

0 голосов
/ 02 июня 2010

Для первой части вашего вопроса есть несколько подходов. Вы можете позвонить в JavaScript и удалить / повторно добавить апплет оттуда. Используйте LiveConnect для вызова из Java в JS и обязательно используйте атрибут «MAYSCRIPT» в теге апплета.

В вашем методе JavaScript удалите апплет из DOM и добавьте новый вместо него.

Вы также можете поместить апплет в iFrame, что дает вам больше возможностей.

Но какова ваша цель в перезагрузке апплета? Было бы безопаснее полностью решить эту проблему в апплете, а не полагаться на JavaScript (и ваш JAR, вероятно, все равно будет кэшироваться, поэтому вы просто перезапускаете тот же апплет).

Я предлагаю либо:

  • код вашего апплета, чтобы вы могли сбросить его GUI и данные с помощью вызова метода, или
  • запустить апплет через небольшой апплет-обертку, который может отбрасывать / воссоздавать реальный апплет, который он отображает.

Для подхода с апплетом-оберткой: реализуйте AppletStub, создайте экземпляр реального апплета и отобразите его как центр BorderLayout, что-то вроде этого (в вашем методе start ()):

Applet applet = new TheRealApplet();
applet.setStub(this);
this.setLayout( new BorderLayout() );
add( applet, BorderLayout.CENTER );
applet.init();
applet.start();

... затем вызовите applet.stop () в методе stop () оболочки и добавьте новый метод, который перезапускает апплет - остановив его, удалив из макета и добавив свежий экземпляр.

...