user inaktivitaet erkennen

Alles was mit Swing und AWT zu tun hat

Moderator: arittner

user inaktivitaet erkennen

Beitragvon hobbybastler » 09.03.2010, 18:06

Hi
ich wuerde gerne einen user, der sich bei meine app eingeloggt hat, ausloggen, wenn die maus sich fuer eine bestimmte Zeit nicht bewegt hat. Wie kann ich am besten erkennen, dass der user zb 5 minuten lang nichts gemacht hat?

Was ich bis jetzt probiert habe ist, in meinem MainFrame auf MouseMotion Events zu warten. Aber andere Panels verdecken ja das frame, so dass die MouseMotion meistens gar nicht beim Frame ankommt. Ich koennte natuerlich auf jedem Panel auf mousemotion event warten und dann ans Frame weiterleiten, aber ich hoffe das es eine einfachere Moeglichkeit gibt...
hobbybastler
 
Beiträge: 91
Registriert: 10.07.2007, 12:12

Re: user inaktivitaet erkennen

Beitragvon arittner » 10.03.2010, 10:56

Moin!

Schau mal hier: http://java.sun.com/javase/6/docs/api/j ... %20long%29

Damit bekommst Du alle Events mit, die an Deine Anwendung gesendet werden.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: user inaktivitaet erkennen

Beitragvon hobbybastler » 11.03.2010, 16:10

Hi
danke fuer die Antwort. Es funktioniert soweit ganz gut...
Code: Alles auswählen
public class MainFrame extends javax.swing.JFrame implements AWTEventListener{
    private Timer timer = new Timer();
    private boolean mouseMoved = false;
    public MainFrame() {
        initComponents();
        [...]
        java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(this,java.awt.AWTEvent.MOUSE_MOTION_EVENT_MASK);
        timer.scheduleAtFixedRate(new LogoutThread(),1000L,30000L);
    }
    public void eventDispatched(AWTEvent arg0) {
        mouseMoved = true;
        System.out.println(arg0.toString());
    }
    private class LogoutThread extends TimerTask {
        @Override
        public void run() {
            if (mouseMoved){
                mouseMoved = false;
            } else {
                logpane1.setLogged(ACC_TYPE.USER);
                System.out.println("logged out");
            }
        }
    }

}


Ich habe nur noch eine Frage dazu. Ist es hier unbedingt notwendig, den zugriff auf die Variable "mouseMoved" zu synchronisieren (synchronized setMouseMoved(boolean moved) anstatt mouseMoved = true / false) ?
(ich vermute die antwort ist ja, bin mir aber nicht 100% sicher)
hobbybastler
 
Beiträge: 91
Registriert: 10.07.2007, 12:12

Re: user inaktivitaet erkennen

Beitragvon arittner » 11.03.2010, 18:15

Moin!

Ganz sicher nicht, wenn Du javax.swing.Timer verwendest, weil Du dann immer im selben EventDispatcherThread bist.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2887
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen


Zurück zu Java - Swing/AWT

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast