2011-04-15 190 views
1

我的要求是重新啓動應用程序。如何在發生更新時重新啓動應用程序?

我有一個用戶界面按鈕。當我點擊它時,它應該停止當前正在運行的應用程序,並且應該啓動相同的應用程序。

正在使用的語言是java。

+0

是在應用程序本身或單獨的應用程序中重新啓動應用程序的按鈕? – MeBigFatGuy 2011-04-15 06:34:13

回答

2

創建一個進程,該進程將使用java啓動新的application.invoke java -jar yourApp.jar並停止當前的應用程序。

0

創建批處理文件myBat.bat

PING 1.1.1.1 -n 1 -w 30000 >NUL // wait for your application to stop 3000 milsec 
java -jar yourApp.jar 

之前system.exit(0)

呼叫

Runtime.getRuntime().exec(myBat.bat); // give proper path 
+0

這將在JVM之外執行 – 2011-04-15 06:45:07

+0

@piyush它必須是,因爲你的jvm將執行'System.exit(0)' – 2011-04-15 06:53:07

+0

公平的,通常我不喜歡在JVM之外執行某些東西。 – 2011-04-15 06:57:31

1

除了Jigar的解決方案,您可能要委託其他參數重新啓動的應用程序,例如VM選項,程序參數或應用程序的基本目錄。您可以將此存根擴展爲您的需求:

private static void restartApplication() throws IOException { 
    List<String> arguments = ManagementFactory.getRuntimeMXBean().getInputArguments(); 
    List<String> fullRestart = new ArrayList<String>(); 
    fullRestart.add(System.getProperty("java.home")+"/bin/java"); 
    fullRestart.addAll(arguments); 
    fullRestart.add("-cp"); 
    fullRestart.add(System.getProperty("java.class.path")); 
    // Assuming that 'Application' contains the main method: 
    fullRestart.add(Application.class.getName()); 
    ProcessBuilder pb = new ProcessBuilder(fullRestart); 
    pb.directory(new File(".").getParentFile()); 
    System.out.println("Starting app - arguments: " + fullRestart); 
    pb.start(); 
    System.exit(0); 
} 
+1

但是不要直接在main-method內調用它,即使是爲了測試的目的 - 它會無限重啓自己...... – sschwieb 2011-04-15 07:28:32

相關問題