2016-03-31 10 views
1

私はJava Swingアプリケーションを開発しました。約60秒間非アクティブになると自動的にログアウトするようにしたいと考えています。私は、Javaタイマーを使用してみましたが、私が試した多くの例のうち、どれも動作していないようです。ここで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秒間何も操作しなくても自動的にログアウトする方法はありますか?

+0

TimerTaskを使用しないでください。あなたはスイングタイマーを使用する必要があります。タイマーが起動すると、Event Dispatch Threadでコードを実行します。 – camickr

答えて

2

一定の時間が経過した後にアクションを呼び出す単純なクラスについては、Application Inactiviyをチェックしてください。

コードでは、AWTEventListenerを使用してイベントを待機します。イベントが発生するたびにSwing Timerが再起動されます。 Swing Timerが起動すると、指定したActionが呼び出されます。

+0

これは私が見つけた例の1つで、これを動作させることはできません。アプリケーションは、1分が経過した後も継続して実行されました。 – Osiris93

+0

私は8年間働いていました。 – camickr

+0

それは私が持っていた問題は、私が何を試しても、私はそれも私が欲しかったクラスにそれを呼び出すことができなかったということでした。あるいは私は別の方法でそれを実装すると思いますか? – Osiris93

1

あなたはthe documentationで見てみる場合は、あなたが表示されます。

throws a NullPointerException - if task is null 

をあなたの行にあなたが正確に何である

timer.schedule(null, 5000); 

あなたにスローされるだ例外を説明すること。私はスケジューラがここに行く正しい方法ではないと思う。なぜなら各ユーザのアクティビティはタイマをリセットするからだ。

+0

しかし、私がnull以外に入れたものは私にエラーを与えます – Osiris93

+0

そして、あなたは何を試しましたか?パラメータは '' TimerTask''のインスタンスである必要があります。 – f1sh

+0

さまざまなものがあり、それらのすべてがエラーを出しました。この例ではクラスを使用しましたが、試してみるとエラーが出ました。私はまだJavaタイマーを理解しようとしています。使用するのに適したパラメータは何でしょうか。 – Osiris93

関連する問題