如果工作台空闲一段时间(30 分钟等),我想“注销”或“关闭”应用程序,但我还不知道如何实现。有人有什么建议吗?
问问题
958 次
2 回答
3
我有一个类似的要求,我挠头来实现它。
要求:
锁定应用程序窗口,如果空闲了一些预先配置的时间。
但是,我是纯粹的,SWT application
我可以完全控制Create
和Dispose
Shell
PFB 摘自我的代码,有据可查,它可能会有所帮助或为您提供见解。
//Boilerplate code for SWT Shell
//Event loop modified in our case
boolean readAndDispatch;
while (!shell.isDisposed()) { //UI Thread continuously loop in Processing and waiting for Events until shell is disposed.
try {
readAndDispatch = shell.getDisplay().readAndDispatch(); // reads an Event and dispatches, also returns true if there is some work else false.
if (!readAndDispatch) { //There is no work to do, means, System is idle
timer.schedule(worker, delay); // So, schedule a Timer which triggers some work(lock or logout code) after specified time(delay)
shell.getDisplay().sleep();
} else{
timer.reschedule(delay); //This means System is not idle. So, reset your Timer
}
} catch (Throwable e) {
log.error(ExceptionUtils.getStackTrace(e));
MessageDialog.openError(shell, "Error !!", ExceptionUtils.getRootCauseMessage(e));
}
}
笔记
我有一个自定义实现,java.util.Timer
通过取消现有的TimerTask
、创建一个新的Timertask
然后再次安排它来提供重新安排功能。
于 2013-06-29T16:11:13.020 回答
2
我在 RCP 应用程序中做了同样的事情。在 Application.java 类中添加以下行。
Display display = PlatformUI.createDisplay();
display.addFilter(SWT.MouseDown, new TimerListener());
display.addFilter(SWT.MouseMove, new TimerListener());
display.addFilter(SWT.KeyDown, new TimerListener());
class TimerListener implements Listener
{
public void handleEvent(Event e)
{
if (Resources.timer != null )
{
// Restart the timer on any UI interactions
Resources.timer.restart();
}
}
}
这是定时器的实现。我正在使用 Swing 计时器,但您可以使用 SWT 计时器。
Resources.timer = new javax.swing.Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
// Log off you application here
}
});
}
});
于 2014-03-07T11:00:35.253 回答