为什么我的start方法未定义为计时器类?

时间:2013-10-02 09:38:19

标签: java

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()方法不存在,但我在库中查找了它。

3 个答案:

答案 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();