import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer.*;
class Timer {
public static void main(String[] args) {
JFrame frame = new JFrame();
final int FIELD_WIDTH = 20;
final JTextField textField = new JTextField(FIELD_WIDTH);
frame.setLayout(new FlowLayout());
frame.add(textField);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
Date now = new Date();
textField.setText(now.toString());
}
};
final int DELAY = 1000;
Timer t = new Timer();
t.start();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
这可能是一个语法错误,但我不这么认为,因为我直接从一本书中复制了这个程序。代码行't.start();'在它下面有一个错误行,说start()方法是未定义的。起初,我认为start()方法不存在,但我在库中查找了它。
答案 0 :(得分:8)
问题在于您宣布自己的自己的 Timer
课程 - 所以Timer t = new Timer()
指的是您的课而不是javax.swing.Timer
,而您不是t声明start
方法。我很确定你想要使用javax.swing.Timer
类。因此,您要删除import javax.swing.Timer.*;
行,并将Timer
类重命名为其他内容。
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.util.*;
public class TimerTest {
...
}
话虽如此,你并没有告诉你的计时器做任何事情......
答案 1 :(得分:0)
虽然Skeet's Answer是正确的,但您可以通过其他方式解决问题。将timer
的初始化更改为
javax.swing.Timer t = new javax.swing.Timer(DELAY, listener);
t.start();
答案 2 :(得分:0)
按照以下步骤执行代码:
Change your class name to some other name.
注意:更改类名后,您将收到编译错误,指出使用Timer类存在歧义。因为您已经导入了util和swing包(这两个包包含Timer类)。
现在将您的代码行更改为
Timer t = new Timer();
as
javax.swing.Timer t = new javax.swing.Timer(DELAY, listener);
t.start();