我在进程上使用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搜索了一段时间没有任何成功。我应该使用不同的流程锁定屏幕吗?
答案 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()
无关。