Java javax计时器问题?

时间:2013-10-23 20:11:26

标签: java swing timer

我还是java的新手,并且从多个站点在线学习了我想为我的GUI程序制作的计时器,但我想先在标准循环上测试计时器。

import javax.swing.*;
import java.awt.*;

class main {
    public static void main(String Args[]) {
        ActionListener changelight = new ActionListener();
        int delay = 1000;
        Timer timer = new Timer(delay, changelight);
        timer.start();
    }

    public void actionPerformed(ActionEvent e) {
            for (int a=0; a<=1000; a++) {
            System.out.printf("%d \n", a);
            }
        return;
    }
}

我似乎无法让它正常运行并希望其中一个使用可以看出原因?

由于

2 个答案:

答案 0 :(得分:2)

ActionListener是一个接口,而不是一个类,这意味着你必须实现如下所示的方法:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class Main {

    public static void main(String args[]){
        final ActionListener action = new ActionListener(){
            public void actionPerformed(final ActionEvent e){
                for(int i = 0; i <= 1000; i++)
                    System.out.printf("%d\n", i);
            }
        };
        final Timer timer = new Timer(1000, action);
        timer.start();
    }
}

或者,如果您使用的是Java 8,也许可以尝试类似:

    public static void main(String args[]){
        final ActionListener listener = e -> {
            for(int i = 0; i <= 1000; i++)
                System.out.printf("%d\n", i);
        };
        final Timer timer = new Timer(1000, listener);
        timer.start();
    }

答案 1 :(得分:1)

您的示例不起作用,因为ActionListener是一个接口,您无法实例化它。相反,您需要创建将实现它的类(或者将ActionListener实现到类main,然后实现actionPerformed)

即使你有这个权利,你的程序也会比第一个事件更早完成,所以不会调用actionPerformed。要观察一些你需要的代码,这些代码将“阻止你的程序过早地到达终点”,为此你可以使用简单的JFrame对象。

以下是工作示例:

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

class TimerAction implements ActionListener{

    boolean isItTimeForTic = true;

   @Override public void actionPerformed(ActionEvent e) {
      if( isItTimeForTic ) {
         isItTimeForTic = false;
            System.out.println("tic ");
      }
      else {
         isItTimeForTic = true;
         System.out.println("tac ");
      }
   }
}

public class TimerTest {

   public static void main(String Args[] ) {
      int delay = 1000;
      Timer timer = new Timer(delay, new TimerAction());

      timer.start();
      JFrame frame = new JFrame();
      frame.setVisible(true);
   }
}