以编程方式在Java中杀死进程

时间:2011-02-10 02:34:55

标签: java multithreading ant

我有一个Swing应用程序,通过文本框获取输入,当点击/单击开始按钮时,我们以编程方式启动Ant脚本(org.apache.tools.ant.Project,org.apache.tools.ant。 ProjectHelper)(ant文件属性来自输入文本框)。这个Ant脚本将开始从CVS中检出代码。

现在,我想在用户点击“停止”按钮时停止执行此Ant脚本。

问题: 一旦用户填写文本框并点击Start,我就开始执行Ant脚本。因此,控件从该Applet或Input页面移动到后端java代码。所以我无法访问主applet中的“停止”按钮。

2 个答案:

答案 0 :(得分:3)

我无法确定,但听起来你想要做的就是使用线程来执行后端Java代码,然后告诉该线程在用户点击停止时终止。

答案 1 :(得分:3)

public class Kill 
{
    public static void main(String[] args) throws Exception 
    {
        ProcessBuilder p = new ProcessBuilder("notepad.exe","fake.xml");
        p.directory(new File("c:/temp/"));

        System.out.println("Starting ...");
        Process x = p.start();
        System.out.println("Started ...");
        System.out.println("Sleeping ...");
        Thread.sleep(3000);     
        System.out.println("Woke up ...");
        System.out.println("Destroying...");

        x.destroy();
        x.waitFor(); // If you don't wait for it then the application will be terminated as soon as it is started

        System.out.println("Return value = " + x.exitValue());
        System.out.println("Over ...");
    }
}

一种方法是使用x.waitFor();方法并继续等待用户操作以终止蚂蚁进程,或者它可以自己完成。无论如何,您将需要x.destroy();并使用x.exitValue()检查成功与失败。但是在工作线程中使用它更有意义,因为UI将保持响应。