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おり、メソッドを宣言していませんstartjavax.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

スキートの答えは正しいですが、別の方法で解決できます。の初期化をtimerに変更

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

コードが実行されるようにするには、次の手順に従います。

Change your class name to some other name.

注: クラス名を変更すると、Timer クラスの使用が曖昧であることを示すコンパイル エラーが発生します。util パッケージと swing パッケージの両方をインポートしたため (これら 2 つのパッケージには Timer クラスが含まれています)。

コード行を次のように変更します

Timer t = new Timer();

なので

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