【问题标题】:Closing a SWT application after certain time of inactivity在一段时间不活动后关闭 SWT 应用程序
【发布时间】:2019-05-22 20:54:56
【问题描述】:

我正在尝试在一段时间不活动后关闭 SWT 应用程序。我在计算不活动期时遇到了困难。我尝试过的所有方法都只是在指定的时间后关闭应用程序,无论我是否仍在处理应用程序。

下面是我尝试过的代码

    Timer timer = new Timer();
    display.asyncExec(new Runnable(){
        public void run() {
            while(!shell.isDisposed()){
                if (!display.readAndDispatch()){ //if the system is idle

                    timer.schedule(new TimerTask() { //schedule timer which will trigger after 1min.

                        @Override
                        public void run() {
                            logout();
                        }
                    }, 60000);

                }
                else{    // reschedule the timer
                    timer.cancel();
                    Timer timer = new Timer();
                }
            }
        }
    });

即使用户正在执行某些操作,我也只能在 1 分钟后注销。有没有办法可以检查 SWT 中的非活动时间?

【问题讨论】:

  • 也许使用Display.addFilter 来收听您认为是“活动”的各种事件并保持最后的活动时间。

标签: java swt


【解决方案1】:

您可以使用Display.addFilter 来侦听使应用“活跃”的各种事件。使用Display.timerExec在UI线程中反复运行代码,检查自上次事件以来的时间。

可能是这样的:

private Instant lastActive;

....

   lastActive = Instant.now();

   final Listener listener = new Listener()
    {
      @Override
      public void handleEvent(final Event event)
      {
        lastActive = Instant.now();
      }
    };

   display.addFilter(SWT.MouseMove, listener);
   display.addFilter(SWT.KeyDown, listener);
   // TODO more filters if required

   final Runnable timer = new Runnable()
    {
      @Override
      public void run()
      {
        final Instant now = Instant.now();

        if (ChronoUnit.SECONDS.between(lastActive, now) > xxx) {  // Number of inactive seconds here
          System.out.println("inactive");  // Inactive code here
        }
        else {
          display.timerExec(1000, this);
        }
      }
    };

   display.timerExec(1000, timer);

   ... create/open shell ...

   while (!shell.isDisposed())
    {
      if (!display.readAndDispatch())
        display.sleep();
    }

【讨论】:

  • 先生,你太棒了。
猜你喜欢
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多