java 监听超时_java线程 如何监控用户操作超时

package org.corey.timer;

import java.awt.HeadlessException;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseMotionListener;

import java.awt.event.MouseWheelEvent;

import java.awt.event.MouseWheelListener;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.Timer;

public class TimerFrame extends JFrame implements KeyListener,MouseMotionListener,MouseWheelListener,ActionListener{

/**

*

*/

private static final long serialVersionUID = 1L;

private Timer timer;

private int delay;

public TimerFrame(int delay) throws HeadlessException {

this.delay=delay;

resetTimer();

this.addKeyListener(this);

this.addMouseMotionListener(this);

this.addMouseWheelListener(this);

}

protected void resetTimer(){

if(timer!=null){

timer.restart();

}else{

timer=new Timer(delay, this);

}

}

@Override

public void mouseDragged(java.awt.event.MouseEvent e) {

resetTimer();

}

@Override

public void mouseMoved(java.awt.event.MouseEvent e) {

resetTimer();

}

@Override

public void mouseWheelMoved(MouseWheelEvent e) {

resetTimer();

}

@Override

public void keyPressed(KeyEvent e) {

resetTimer();

}

@Override

public void keyReleased(KeyEvent e) {

resetTimer();

}

@Override

public void keyTyped(KeyEvent e) {

resetTimer();

}

@Override

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(this, "退出!");

}

}

主界面扩展:

package org.corey.timer;

import java.awt.Dimension;

import java.awt.HeadlessException;

import javax.swing.SwingUtilities;

@SuppressWarnings("serial")

public class App extends TimerFrame{

public App(int delay) throws HeadlessException {

super(delay);

this.setPreferredSize(new Dimension(300,300));

this.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new App(5000);

}

});

}

}

至于对于点解主界面子控件也能触发事件的解决方案,我对SWING不是特别熟悉,不知道是不是像JS等等一样存在冒泡或者说捕获这样的一个过程,如果是的话,则很好解决,如果不是,我觉得那就只能在子控件中将TimerFrame手动设置为监听器,或者

重载主界面的add方法,或者。。。。。只要能吧主控件在一个统一,集中的时候加入到子控件监听器里面去,单这个加入的代码一定要集中,避免后期你做改动;

如用主界面来做子控件工厂:

TimerFrame.createButton(){

Button btn=new Button();

btn.addActionListener(this);

return btn;

}

AOP等等,应该都可以实现吧,期待牛人更好的解决方案

2010年4月17日 12:37

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页