有没有办法从applet本身重新加载/刷新java applet?

时间:2009-06-25 23:27:05

标签: java applet refresh

我的applet上有一个按钮(包含在浏览器中),我希望以两种方式重新加载或刷新整个applet:

  1. 无需刷新浏览器即可刷新小程序本身
  2. 刷新整个浏览器
  3. 这可以在小程序中实现吗?

2 个答案:

答案 0 :(得分:3)

使用AppletContext.showDocument(...)方法:

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

这会将包含applet的文档加载到已加载applet的同一窗口/框架中。

答案 1 :(得分:0)

对于问题的第一部分,有几种方法。您可以调用JavaScript并从那里删除/重新添加applet。使用LiveConnect从Java调用JS,并确保在applet标记中使用“MAYSCRIPT”属性。

在JavaScript方法中,从DOM中删除applet并添加一个新的applet。

您也可以将applet放在iFrame中,这样可以提供更多选项。

但是你重新加载applet的目的是什么?在applet中完全解决这个问题是一种更安全的方法,而不是依赖于JavaScript(而且你的JAR很可能会被缓存,所以你基本上只是重新启动相同的applet)。

我建议:

  • 编写您的applet代码,以便您可以通过方法调用或
  • 重置其GUI和数据
  • 通过一个小包装程序applet运行applet,它可以删除/重新创建它正在显示的真实applet。

对于包装器applet方法:实现AppletStub,实例化真正的applet,并将其显示为BorderLayout的中心,类似这样(在你的start()方法中):

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

...然后在包装器的stop()方法中调用applet.stop(),并添加一个重新启动applet的新方法 - 通过停止它,从布局中删除它,以及添加一个新的实例。