2014-04-04 233 views
0

下面的代碼將在killProcess()殺死它之後運行OSK(屏幕鍵盤)過程,之前它在我添加Thread.sleep 1秒之前不會彈出。那麼是否有任何方法可以確保killProcess()在啓動沒有Thread.sleep的OSK進程一秒之前完全執行?一些不是基於時間的,在進入下一行之前會完全運行killProcess()的代碼。對不起,任何困惑和感謝閱讀!希望有人願意幫助我。如何在繼續之前等待方法完成完成?

public static void main(String... args) { 
    try { 
     killProcess(); 

     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

     Runtime.getRuntime().exec("c:\\Temp\\osk.exe"); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

} 

public static void killProcess() throws Exception { 

    Runtime rt = Runtime.getRuntime(); 

    rt.exec("cmd.exe /c taskkill " + "osk.exe"); 

    Runtime.getRuntime().exec("taskkill /IM " + "osk.exe"); 

} 

回答

0
public static void main(String... args) { 
    try { 
     killProcess(); 
     Runtime.getRuntime().exec("c:\\Temp\\osk.exe"); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

public static void killProcess() throws Exception { 
    Runtime rt = Runtime.getRuntime(); 
    rt.exec("cmd.exe /c taskkill " + "osk.exe").waitFor(); 
    rt.exec("taskkill /IM " + "osk.exe").waitFor(); 
} 

Runtime.exec(String)返回Process,其具有waitFor()方法。這將阻止當前的Thread,直到過程終止。

+0

我有點不確定你爲什麼以兩種不同的方式運行'taskkill'。我甚至不認爲第一次調用會起作用,但我已經專注於這個問題的Java方面,而不是Windows命令行方面。 – studro

+1

感謝您的回答!這兩個taskkill都在工作,這只是我之前做過的一個小實驗,用於檢查它是否都在工作 – Artest113

+0

在命令行中,第一個調用在Windows 7中不適用於我,但如果它現在適用於您, 那很棒。我很高興能夠提供幫助。 – studro

相關問題