0

我对 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;
    }
}

我似乎无法让它正常运行,并希望其中一个可以看到为什么?

谢谢

4

2 回答 2

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();
    }
于 2013-10-23T20:15:26.403 回答
1

您的示例不起作用,因为 ActionListener 是一个接口,您无法实例化它。相反,您需要创建将实现它的类(或将 implements 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);
   }
}
于 2013-10-23T20:27:18.673 回答