我还是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;
}
}
我似乎无法让它正常运行并希望其中一个使用可以看出原因?
由于
答案 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);
}
}