2
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()方法是不存在的,后来在库里查了一下。

4

3 回答 3

8

问题是您正在声明自己的 Timer类 - 所以Timer t = new Timer()是指您的类而不是javax.swing.Timer,并且您没有声明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 {
    ...
}

话虽如此,你并没有告诉你的计时器任何事情......

于 2013-10-02T09:40:27.837 回答
0

按照以下步骤使您的代码得到执行:

Change your class name to some other name.

注意:更改类名后,您将收到一个编译错误,说明使用 Timer 类存在歧义。因为您已经导入了 util 和 swing 包(这两个包包含 Timer 类)。

现在将您的代码行更改为

Timer t = new Timer();

作为

javax.swing.Timer t = new javax.swing.Timer(DELAY, listener);
t.start();
于 2013-10-02T09:52:42.053 回答
0

虽然Skeet 的答案是正确的,但您可以用另一种方式解决它。将初始化更改timer

javax.swing.Timer t = new javax.swing.Timer(DELAY, listener);
t.start();
于 2013-10-02T09:43:32.507 回答