有没有办法从applet本身重新加载/刷新java applet?
我的applet上有一个按钮(包含在浏览器中),我希望通过以下两种方式之一重新加载或刷新整个applet:
- 无需刷新浏览器即可刷新applet本身
- 刷新整个浏览器
这可能来自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的新方法 – 通过停止它,从布局中删除它,以及添加一个新的实例。