超时后,从JavalockingWindows桌面

我想我的Java应用程序在特定的超时lockingWindows桌面。 我有一个计时器,工作正常,但我似乎无法执行命令来locking工作站。

javax.swing.Timer tim = new javax.swing.Timer(1000, new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("CARD NOT PRESENT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); // LOCK SCREEN Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("%windir%/System32/rundll32.exe user32.dll,LockWorkStation"); } }); 

这里有一些错误吗? 或者也许更简单的方法来做到这一点?

我认为有一个更好的方法来测试这个:

1)把命令放在一个.bat文件中。

2)运行bat文件。 它工作吗?

3)如果是这样,请在代码中调用.bat文件。

4)它工作吗? 如果是这样,那么你就完成了。 我不认为有什么价值编码Windows特定的代码到运行时的exec,只是保持bat文件作为一个单独的文件在您的应用程序。

Runtime.exec有时会失败,因为JVM中的路径与原生操作系统中的路径不一样。

尝试绝对位置:

 Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation"); 

这也可以(在Windows 7 x86上测试):

 final String path = System.getenv("windir") + File.separator + "System32" + File.separator + "rundll32.exe"; Process pr = rt.exec(path + " user32.dll,LockWorkStation");