2011-02-10 136 views
2

我有一個Swing應用程序,它通過文本框獲得輸入,當Start按鈕被點擊時,我們啓動一個Ant腳本 - 以編程方式(org.apache.tools.ant.Project,org.apache .tools.ant.ProjectHelper)(ant文件屬性來自輸入文本框)。此Ant腳本將開始檢出CVS中的代碼。以Java編程的殺死進程

現在,我想在用戶點擊停止按鈕時停止此腳本的執行。

問題: 只要用戶填入文本框並點擊開始,我就開始執行Ant腳本。所以,控制從該Applet或Input頁面移動到後端Java代碼。所以我無法訪問主applet中的「停止」按鈕。

有人可以幫忙嗎?謝謝

+0

我同意約翰,你可能想使用某種線程。如果我是你,我會添加「Ant」和「MultiThreading」標籤。 – amccormack 2011-02-10 02:39:58

+0

由於您不是要求殺死外部進程[也不是當前進程],所以我編輯了標記以反映您的問題。 – Fakrudeen 2011-02-10 07:34:03

回答

3

我不能確定,但​​它聽起來像你想要做的是使用線程來執行後端Java代碼,然後告訴該線程終止,如果用戶停止。

+0

Ant可以自己運行多個線程。所以殺死原來的人可能實際上沒有幫助。但我不確定。 – 2011-02-10 02:47:59

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將保持響應。