2011-10-04 4 views
1

Я хочу, чтобы мое приложение java заблокировало рабочий стол Windows после определенного таймаута. У меня есть таймер, который работает нормально, но я не могу выполнить команду блокировки рабочей станции.Заблокировать рабочий стол windows с Java после таймаута

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

вы видите 'CARD NOT PRESENT ...' текст напечатан на стандартный выход? – krock

ответ

3

Я думаю, что есть лучший способ проверить это:

1) поместить команду в BAT-файл.

2) Запустите файл bat. это работает ?

3) Если это так, вызовите файл .bat в свой код.

4) Работает ли это? Если да, тогда все готово. Я не думаю, что есть какая-либо ценность в кодировании конкретного кода Windows в runtime exec, просто держите файл bat в виде отдельного файла в вашем приложении.

Runtime.exec иногда терпит неудачу, потому что пути не совпадают внутри JVM, поскольку они находятся в родной ОС.

+0

Абсолютно совершенный, спасибо большое. – Daisetsu

1

Попробуйте абсолютное местоположение:

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

Это работает, как хорошо (проверено на Windows 7 x86):

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