java swing 窗口不用时定时关闭

我写了一些Java swing客户端程序,我想达到一个效果:长时间不用时自动关闭.

如何实现呢?

启动主窗口时,调用如下方法,给Frame添加监听事件:

Java代码  

  1. private void init33() {  
  2.         this.addWindowListener(new WindowAdapter() {  
  3.   
  4.             @Override  
  5.             public void windowActivated(WindowEvent e) {  
  6.                 System.out.println("window Activated");  
  7.                 if (task != null) {  
  8.                     task.cancel();  
  9.                     task = null;  
  10.                 }  
  11.                 super.windowActivated(e);  
  12.             }  
  13.   
  14.             @Override  
  15.             public void windowDeactivated(WindowEvent e) {  
  16.                 System.out.println("window Deactivated");  
  17.                 if (isLocked) {// over three times and is still locked,meanwhile use  
  18.                     // try to log in  
  19.                     if (task != null) {  
  20.                         task.cancel();  
  21.                         task = null;  
  22.                     }  
  23.                 } else {// first into this if clause(if (timesFail >=  
  24.                         // LoginUtil.MAX_LOGIN_FAIL_TIMES ))  
  25.                     task = null;  
  26.                 }  
  27.                 if (timer == null) {  
  28.                     timer = new Timer();  
  29.                 }  
  30.               
  31.                 if (task == null) {  
  32.                     task = new MyTask(QRCodeApp.this);  
  33.                 }  
  34.                 timer.schedule(task, Constant.MILLISECONDS_WAIT_WHEN_FAIL);  
  35.                 System.out.println("开始计时");  
  36.                 isLocked = true;  
  37.                 super.windowDeactivated(e);  
  38.             }  
  39.   
  40.             @Override  
  41.             public void windowGainedFocus(WindowEvent e) {  
  42.                 System.out.println("window GainedFocus");  
  43.                 super.windowGainedFocus(e);  
  44.             }  
  45.   
  46.             @Override  
  47.             public void windowLostFocus(WindowEvent e) {  
  48.                 System.out.println("window LostFocus");  
  49.                 super.windowLostFocus(e);  
  50.             }  
  51.               
  52.         });  
  53.     }  

 MyTask 源码:

Java代码  

  1. package com.qr.yj.common;  
  2.   
  3. import com.qr.yj.QRCodeApp;  
  4.   
  5. public class MyTask extends java.util.TimerTask{  
  6.     private QRCodeApp frame;  
  7.       
  8.     public MyTask(QRCodeApp frame) {  
  9.         super();  
  10.         this.frame=frame;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void run() {  
  15.         frame.setLocked(false);  
  16.         System.out.println("$$$$$");  
  17.         frame.dispose();  
  18.         System.exit(0);  
  19.     }  
  20. }  

 说明:

(1)Constant.MILLISECONDS_WAIT_WHEN_FAIL 的值600000 ,int类型,单位是:毫秒,即600秒.

(2)QRCodeApp 继承了JFrame,有如下成员变量:

Java代码  

  1. private Timer timer = new Timer();  
  2.     private MyTask task = null;  
  3.     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

java swing 窗口不用时定时关闭的相关文章

Java中窗口关闭事件。

问题描述 Java中窗口关闭事件. 程序代码如下: package com.packageTemp; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class MouseAdapterTest { JFrame f=null; JButton btn=null; public static void main(String[] args) { new MouseAdapterTest(); } /

java swing 一个窗口打开新创口 加上go()程序就死掉了

问题描述 java swing 一个窗口打开新创口 加上go()程序就死掉了 import javax.swing.*; import java.awt.Rectangle;import java.awt.event.*; public class Swing7 extends JFrame implements ActionListener { JButton jb = new JButton(); public Swing7() { this.setTitle(""Java--&q

java swing启动时窗口最大化

Java swing启动时窗口最大化 Java代码   setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );      

使用Java Swing 创建一个XML编辑器

xml|创建 我想您一定对XML有所了解,说不定您现在还跃跃欲试想写一段XML文本呢,可是现在能找到的跨平台的.免费的XML编辑器太少了.所以在本文中,我想介绍一下或者说带您一步一步的开发一个简单的XML编辑器,当然我们要用到一些最常见的Java 2 Swing组件,不过这些都是免费的,有些是JDK中的,有些是可以从网上下载的.我想通过本文,你就可以创建一个属于你自己的XML编辑器. 先让我介绍一下本文辑写的思路.首先我想简要的讨论一下XML和为什么树型结构比较适合用来显示XML,然后我们来看一

教您如何利用Java Swing实现游戏开发

Java咖啡馆已经开张不少时日了,如果你已经喜欢上了Java这杯咖啡的味道,那么记得常来哦.这一次,我们为大家准备了一大杯香浓的咖啡--将以开发一个"连连看"游戏为蓝本,和大家共同学习Java中Swing的用法,当你细心品味这杯咖啡后,你会发现,不但Java这杯咖啡还别有一番风味,而且还学会了专业游戏的开发方法,真是两全其美! 为了让大家先睹为快,下图便是游戏的截图.大家可以下载游戏试玩(下载游戏程序:下载源文件),然后在命令行方式下使用java -jar kyodai.jar来运行.

新手入门:Java Swing的基础知识全接触

1.前言: 当我们学习过了java中的基本语法,并且熟悉java的面向对象基础以后,我们就可以开始简单的Swing程序的设计,用过Vb的朋友可能会被它的简单的设计用户界面方法所吸引,只需要拖几个控件到窗体上,为每个空件编写event就可以简单的实现界面设计.但是强大的java也不比vb逊色.同样可以设计出精美的界面. 2.Swing概述: 当java1.0刚刚出现时还没有swing,当时的GUI基本编程库,sun取名叫AWT(Abstract Window Tookit),基本AWT库处理用户界

java swing如何添加背景图片并能根据窗口大小进行缩放

前段时间在用JAVA SWING做个客户端的时候,有要在一块主面板上添加背景图片的需求,于是自己在网上找了些资料研究一下,有些网友说用JLabel来做,通过设置它的icon属性来实现,但个人感觉这种做法很HACK,呵呵,而且这种方法容易带来在上面的内容被遮住等等的问题,所以个人更喜欢用一个继承JPanel的类来实现的方法,其实我感觉它跟Web中的层的概念有几分相似吧,只需要把这个"层"加到面板的最下面,作为垫底的,就OK了,来看看怎样实现它: import javax.swing.JP

Java Swing多线程死锁问题解析

在基于Java Swing进行图形界面开发的时候,经常遇到的就是Swing多线程问题.我们可以想想一下, 如果需要在一个图形界面上显示很多数据,这些数据是经过长时间.复杂的查询和运算得到的.如果在图 形界面的同一个线程中进行查询和运算工作则会导致一段时间界面处于死机状态,这会给用户带来不良的 互动感受.为了解决这个问题,一般会单独启动一个线程进行运算和查询工作,并随时更新图形界面.这 时候,另一个问题就出现了,可能不仅没有解决原来偶尔死机问题,还可能导致程序彻底死掉.幸运的是 在JDK中暗藏了一

Java Swing中的键盘事件处理

在java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等.这里就介绍如何定义键盘事件,以及如何处理这些事件. 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同的处理键盘事件的方法:在Jcomponent中,定义了registerKeyboardAction方法,使用这个方法来将需要处理的键盘事件以及处理事件的行为绑定在一起.Text类中具有keymap对象,同Jcomponent中的处理方法类似,这个对象保存着需要处理的键盘事件和对应的行为. 而在jdk