waitFor命令没有等待

时间:2013-10-31 12:02:08

标签: java process

我在进程上使用waitFor命令时遇到问题。我的代码就像这样

//preconditions
try{
  // lock the work station
  Process p= Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
  int exitval=p.waitFor();
  // If the authentication is successful
  if(exitval==0)
  {
     //statements to insert into database 
  }
}
catch(IOException e)
{
   e.printStackTrace();
}
catch (InterruptedException e) {
   e.printStackTrace();
}

该过程正在锁定屏幕,但是在用户实际能够使用退出值“0”进行身份验证并且程序将语句插入到我的数据库之前,它正在退出。我希望进程等待用户成功通过身份验证,然后将我的数据插入数据库。我用Google搜索了一段时间没有任何成功。我应该使用不同的流程锁定屏幕吗?

2 个答案:

答案 0 :(得分:2)

在执行LockWorkStation时,会调用以下内容。请注意,它执行异步

BOOL WINAPI LockWorkStation(void);
If the function succeeds, the return value is nonzero. Because the function executes asynchronously, 
a nonzero return value indicates that the operation has been initiated. It does not indicate whether 
the workstation has been successfully locked.

此外,在上面的代码中,您需要执行该过程。

在您的问题中,更改:

Process p= Runtime.getRuntime().("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
int exit = p.waitFor();

Process p= Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
int exit = p.waitFor();

此外,您可能希望使用ProcessBuilder而不是Runtime.exec()

答案 1 :(得分:0)

LockWorkStation是一个异步函数。它总会立即返回而不是等待解锁。从控制台运行C:\Windows\System32\rundll32.exe user32.dll,LockWorkStation时,您甚至可能会在屏幕被锁定之前很快看到的下一个命令提示符。换句话说,这与Java和Process.waitFor()无关。