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

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

  1. 无需刷新浏览器即可刷新applet本身
  2. 刷新整个浏览器

这可能来自applet吗?

使用AppletContext.showDocument(…)方法:

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

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

对于问题的第一部分,有几种方法。 您可以调用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的新方法 – 通过停止它,从布局中删除它,以及添加一个新的实例。