2016-05-12 59 views
-2

我想停止一個已經在Windows中使用命令提示符啓動的Java程序。用java程序B終止一個java程序B

如何使用其他正在運行的Java程序關閉它?

+0

你想要它停止自己或另一個Java程序? – Laurel

+0

@Laurel當然我的意思是另一個Java程序。我寫了「這應該與Java程序不是手動的。」 – SSD

+0

http://stackoverflow.com/questions/4409731/how-can-i-programatically-close-a-specific-java-application-running-in-windows-f – Idos

回答

1

如果你想程序終止或停止,只需要輸入

System.exit(0);

雖然System.exit(1);將表明,發生這通常意味着發生了什麼錯誤了「非零」退出代碼。用戶0,如果它退出,一切都很好。使用非零(如1)來表示存在錯誤(如不存在的文件或其他東西)。

如果你想停止另一個Java程序的Java程序,你首先必須得到Java程序的進程ID。一旦這個進程ID已知,你可以通過系統調用來終止它(就像你在終端中一樣)。

舉例來說,如果我有這個Java程序運行indefinitly:

import java.lang.management.ManagementFactory; 
public class Test { 
    public static void main(String[] args) { 
     System.out.println("Hello, World"); 
     System.out.println(ManagementFactory.getRuntimeMXBean().getName()); 
     while (true) { 
       int i = 0; 
     } 
    } 
} 

我可以看到它的進程ID(例如123),並用以下命令殺死它。

$ kill 123 

一旦做到這一點,你必須找到某種方式爲它的輸出這個數據到另一個java程序,它要求之後。然後一旦知道進程ID,就可以管理系統調用或shell exec。

import java.lang.* ; 

public class Shell 
{ 
     public static void main(String[] args) 
     { 
       try { 
         String cmd = "kill 123"; 
         Runtime run = Runtime.getRuntime(); 
         Process pr = run.exec(cmd) ; 
       } catch (Exception ex) { 
         System.out.println("SOMETHING WENT WRONG"); 
       } 
     } 
} 

節點,所有shell命令或run.exec必須捕獲該異常,因爲它被拋出。它必須位於try catch塊中,否則將無法編譯。

希望這會有所幫助。

+0

謝謝。但我的問題是我有一個Java程序假設A正在運行,我想通過另一個Java程序B殺死該程序。 – SSD

+0

檢查我新的編輯。讓我知道這是否適合你。 – 1N5818

+0

在windows中,不是'kill',而是需要在windows shell上使用'Taskkill':https://technet.microsoft.com/en-us/library/bb491009.aspx – 1N5818