我写了一些Java swing客户端程序,我想达到一个效果:长时间不用时自动关闭.
如何实现呢?
启动主窗口时,调用如下方法,给Frame添加监听事件:
- private void init33() {
- this.addWindowListener(new WindowAdapter() {
- @Override
- public void windowActivated(WindowEvent e) {
- System.out.println("window Activated");
- if (task != null) {
- task.cancel();
- task = null;
- }
- super.windowActivated(e);
- }
- @Override
- public void windowDeactivated(WindowEvent e) {
- System.out.println("window Deactivated");
- if (isLocked) {// over three times and is still locked,meanwhile use
- // try to log in
- if (task != null) {
- task.cancel();
- task = null;
- }
- } else {// first into this if clause(if (timesFail >=
- // LoginUtil.MAX_LOGIN_FAIL_TIMES ))
- task = null;
- }
- if (timer == null) {
- timer = new Timer();
- }
- if (task == null) {
- task = new MyTask(QRCodeApp.this);
- }
- timer.schedule(task, Constant.MILLISECONDS_WAIT_WHEN_FAIL);
- System.out.println("开始计时");
- isLocked = true;
- super.windowDeactivated(e);
- }
- @Override
- public void windowGainedFocus(WindowEvent e) {
- System.out.println("window GainedFocus");
- super.windowGainedFocus(e);
- }
- @Override
- public void windowLostFocus(WindowEvent e) {
- System.out.println("window LostFocus");
- super.windowLostFocus(e);
- }
- });
- }
MyTask 源码:
- package com.qr.yj.common;
- import com.qr.yj.QRCodeApp;
- public class MyTask extends java.util.TimerTask{
- private QRCodeApp frame;
- public MyTask(QRCodeApp frame) {
- super();
- this.frame=frame;
- }
- @Override
- public void run() {
- frame.setLocked(false);
- System.out.println("$$$$$");
- frame.dispose();
- System.exit(0);
- }
- }
说明:
(1)Constant.MILLISECONDS_WAIT_WHEN_FAIL 的值600000 ,int类型,单位是:毫秒,即600秒.
(2)QRCodeApp 继承了JFrame,有如下成员变量:
- private Timer timer = new Timer();
- private MyTask task = null;
- private boolean isLocked = false;
后台日志:
window Activated
window Deactivated
开始计时
window Activated
window Deactivated
开始计时
$$$$$
程序源代码见附件:qrcode_swing.zip
依赖的jar包:io0007-find_progess-0.0.8.4-SNAPSHOT.jar,
注意:程序采用maven 构建
时间: 2024-11-02 21:14:39