2016-05-12 70 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