在60秒不活动后退出Java应用程序?

时间:2016-03-31 15:00:00

标签: java swing netbeans timer

我开发了一个Java Swing应用程序,我希望这样做,如果大约60秒不活动,它会自动注销。我尝试过使用java计时器,但是在我尝试的很多例子中,它们似乎都没有用。

这是我尝试过的最新版本(也是代码中没有任何错误的唯一版本):

int seconds;
    Timer timer;
    Toolkit toolkit;
    public void AutoLogout()
    {
        toolkit = Toolkit.getDefaultToolkit();
        timer = new Timer();
        timer.schedule(null, 5000);
        if(seconds == 0)
        {
            LoginPage lp = new LoginPage();
            lp.setVisible(true);
            this.dispose();
        }
    }

但是,当我运行应用程序时,它会在堆栈跟踪中获得以下输出:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.util.Timer.sched(Timer.java:399)
    at java.util.Timer.schedule(Timer.java:193)
    at AdminMainPage.AutoLogout(AdminMainPage.java:1078)
    at AdminMainPage.<init>(AdminMainPage.java:23)
    at AdminMainPage$35.run(AdminMainPage.java:1289)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我已尝试过Stackoverflow中的几个示例,但它们都不起作用。如何让系统在60秒不活动后自动退出?

2 个答案:

答案 0 :(得分:2)

查看Application Inactiviy一个简单的类,该类将在给定的时间段后调用Action。

代码使用AWTEventListener来监听事件。每次生成事件时,都会重新启动Swing Timer。当Swing Timer触发您指定的Action时。

答案 1 :(得分:1)

如果您查看the documentation,您会看到:

throws a NullPointerException - if task is null

这正是你在行中所做的

timer.schedule(null, 5000);

这解释了被抛出的异常。我不认为调度程序是正确的方法,因为每个用户活动都应该重置计时器。