2014-04-04 171 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

相关问题