Для первой части вашего вопроса есть несколько подходов. Вы можете позвонить в 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 () оболочки и добавьте новый метод, который перезапускает апплет - остановив его, удалив из макета и добавив свежий экземпляр.