2010-08-13 41 views
0
運行批處理

比方說,從Java

我有一個Java類JavaClass1.java.I我從這個Java類執行2個批處理文件。 每個.bat文件啓動另一個Java應用程序。 可以說,這兩個應用程序每個需要15個小時完成,而且它們也不相互依賴。

我該如何解決這個問題。我不必等待一個完成,以便我必須 開始另一個,我也可以同時做到這一點。

我發現有人在討論輸出流,輸入流和錯誤流,如果我等待錯誤處理,然後我必須等待15個小時。我不想那樣做。

有什麼辦法嗎?請建議。謝謝

回答

2

將啓動每個.bat的機制放在它自己的線程中,然後啓動每個線程。

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //Launch first bat. 
     } 
    }).start(); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //Launch second bat. 
     } 
    }).start(); 
+0

怎麼樣處理線程...我必須擔心它嗎? – user234194 2010-08-13 22:41:19

+0

我編輯發佈一些代碼。我只是使用匿名類。所以顯然沒有問題。 – Mike 2010-08-13 22:45:35

+0

不要我一旦創建就銷燬線程。對不起,但我不太瞭解線索。或者你能解釋關於上述代碼片段的後果嗎? – user234194 2010-08-13 22:48:17

1
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app1.jar"}); 
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app2.jar"}); 

只要使用運行時執行的服務,如果你不叫process.waitFor()獲取進程的返回碼,也不會阻塞,這樣你就可以立即撥打下一個應用程序。如果您想從應用程序返回代碼,請在每個主題上以Mike身份運行應用程序。

+0

你能解釋我什麼時候它會阻止,什麼時候它不會阻止... 我想執行.bat這將開始另一批。我可以做同樣的事情,它不會阻止。 PLZ解釋,因爲我是新的。 – user234194 2010-08-15 02:30:19

+0

當您使用Runtime.exec(...)創建新的子進程時,它會返回一個進程對象,如果您想知道子進程的返回代碼,則必須等待它退出,才能執行此操作,只需用您收到的進程對象調用waitFor()。 waitFor()會導致你的線程調用這個方法阻塞util子進程結束。你有2個應用程序相互獨立,如果你不需要聽這些退出代碼,只是不要調用waitFor(),你不會被阻止,並且可以立即調用下一個exec。 – secmask 2010-08-15 03:13:50