美好的一天,我正在寻找一种重新启动我的应用程序的方法,我提出了一个概念:
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
new Application();
dispose();
}
});
正在处理的Object是正在创建的新Object。我的问题是,它是否是重启应用程序的好方法?为什么不?还有更好的方法吗?
P.S如果存在类似的问题,我真的找不到它。答案 0 :(得分:5)
我的问题是它是否是重启应用程序的好方法?
不,不是。
为什么不呢?
没有保留以前的信息,您需要不必要地重复读取资源,并且您可能会通过向其抛出多个不必要的创建窗口来激怒用户。
另外,问问自己,您使用的专业应用程序有多少。如果您需要处理不同的文字处理文档,MS Word是否关闭并重新启动?如果您需要阅读新的电子表格,Excel是否会这样做?
并且有更好的方法吗?
是的,为您的程序中的所有相关类提供一个reset()
方法,该方法将类和GUI组件的所有字段重置为其原始状态,并在该类包含的所有组成对象上调用相同的方法,以便对主类的reset()
调用将导致对所有子对象的级联调用。如何编码将完全取决于您的程序的具体细节。
如果您的GUI是在明确的MVC design pattern上构建的,那么通常控制对象会在主模型对象上调用reset()
,然后GUI(视图)会对更改进行响应模特的状态。
答案 1 :(得分:1)
遵循MVC范例,我有一个主应用程序是控制器,并使用SwingUtilities.invokeLater
启动视图,一个JFrame。在JFrame上有正确的setDefaultCloseOperation(DISPOSE_ON_CLOSE)
因此JFrame actionPerformed会调用控制器重启。
当需要单实例应用程序时,一个更清晰的类结构。 再次打开应用程序,比如打开另一个文档,应该运行一个应用程序。
我的标准解决方案是创建一个RMI端口绑定应用程序,并在主要检查是否已经在该端口上运行应用程序并将命令行传输到该远程RMI服务器,然后退出。