Java Swing Timer Actionperformed不会被调用

时间:2015-04-30 11:15:56

标签: java swing timer

所以,我一直在乱用Java中的Swing Timer,试图做一点时间计数器。然而,每当我制作一个计时器并让它运行时,动作执行的方法似乎没有反应。 这是我的简化UI类:

public class UI implements ActionListener {

    private int value = 0;
    Timer timer = new Timer(5,this);

    @Override
    public void actionPerformed(ActionEvent e) {
        value++;
        System.out.println(value);
    }

    public void start() {
        timer.start();
    }

}

这就是我的发射器的样子:

public class Launcher {

    public static void main(String[] args) {
        UI ui = new UI();
        ui.start();
    }

}

当我运行启动器时,没有任何反应。我知道他创建了UI并让计时器启动,但计时器似乎没有调用Actionperformed方法。 我想知道为什么。 它应该在每个间隔5(毫秒?)时显示+1值。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您的程序在计时器线程有机会启动之前退出。您应该在退出主线程之前给一点时间以允许计时器线程继续运行。 <{1}}解决后Thread.sleep(100)

答案 1 :(得分:0)

嘿,我可以帮助你...你应该做以下事情;

首先导入以下内容;

import java.awt.event.ActionEvent ;

import java.awt.event.ActionListener ;

import javax.swing.Timer ; 

然后在表格的末尾初始化计时器,如下所示;
public static void main(String args []){

     java.awt.EventQueue.invokeLater(new Runnable() {        
                public void run() {       
                new mainprogramme().setVisible(true);    
            }    


  });    

    }    
        private Timer timer ;

然后在初始化定时器后添加一个公共类,如下所示;

public class progress implements ActionListener {
    public void actionPerformed(ActionEvent evt){

    int n = 0 ;
    if (n<100){
        n++ ;
        System.out.println(n) ;
    }else{
        timer.stop() ;
    }
    }
    }

执行此操作后,转到j框架&gt;右键单击并选择&gt;事件&gt;窗口&gt;窗口打开并键入以下内容;

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        timer = new Timer(100,new progress()) ;

并且在您完成所有操作之后,将一个按钮命名为任何内容,并在其空白处键入以下内容,如下所示;

  timer.start();

这就是它的代码,然后回复我......