在许多软件中,我们进行任何更改后,必须重新启动软件才能使更改生效,有时可以选择自动重启软件。我怎样才能在Java中实现这个呢?
这就是我的尝试:
int o = JOptionPane.showConfirmDialog(
frame,
"<html>The previously selected preferences have been changed.<br>Watch must restart for the changes to take effect.<br> Restart now?</html>",
"Restart now?", JOptionPane.YES_NO_OPTION);
if(o == JOptionPane.YES_OPTION) {
try {
Process p = new ProcessBuilder("java", "Watch").start();
} catch(IOException e) {
e.printStackTrace();
}
frame.dispose();
但是,这似乎不起作用。应用程序刚刚终止。我在这里错过了什么?提前谢谢!
答案 0 :(得分:0)
这看起来很有趣:Make your application restart on its own
基本上,您可以创建一个脚本来运行您的应用。在您的应用程序中,如果用户选择重新启动,则会创建重新启动文件,然后退出该应用程序。退出时,启动脚本会检查是否存在重新启动文件。如果存在,请再次调用该应用程序。
答案 1 :(得分:0)
我认为仅使用JVM的设施很难。
我从来没有这样做过,但是如果你真的想终止运行当前应用程序的整个JVM并启动一个全新的实例,我可能会尝试这些方法:
从主应用程序线程中,启动一个shell脚本/批处理文件(例如,使用Runtime.getRuntime()。exec(“...”)`执行以下步骤:
与第一个主应用实例中的第1步并行,可能需要等待一小段时间(以确保实际执行后台内容)并调用System.exit(0);
或其他一些关闭方法
也许有一种更简单的方法,这只是我能想到的第一种方式。
答案 2 :(得分:0)
下一个怎么样:
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
buildAndShowGui(args);
}
});
}
public static void buildAndShowGui(final String[] args) {
final JFrame frame = new JFrame("Window");
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setSize(100, 400);
frame.setLayout(new FlowLayout());
JButton button = new JButton("Click!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int option = JOptionPane.showConfirmDialog(frame, "Restart?");
if (option == JOptionPane.YES_OPTION) {
frame.dispose();
restart(args);
}
}
});
frame.add(button);
frame.setVisible(true);
frame.toFront();
}
public static void restart(String[] args) {
main(args);
}