0

timer.stop() でエラーが発生します。「ローカル変数 timer はクラス内からアクセスされます。final を宣言する必要があります」と表示されます。

public static void main(String args[]) {
    int tick; 
    Timer timer;


        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int tick=0;
                System.out.println("Success" + ++tick);
                if (tick > 4) {
                    timer.stop();
                }
            }
        });
        timer.setInitialDelay(0);







    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

私はこれを試しました:

public static void main(String args[]) {

    int tick; 
    Timer timer;


     final Timer timer = new Timer(1000, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        int tick=0;
        System.out.println("Success" + ++tick);
        if (tick > 4) {
            timer.stop(); //this refers to the final variable timer, this is valid.
        }
    }
          });
        timer.setInitialDelay(0);







    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

そして今、「final Timer timer = new Timer(1000, new ActionListener() {」というエラーが発生します。そのタイマーはすでに main(java.lang.String[]) で定義されており、Timer timer を削除すると、「 timer.stop()」変数タイマーが初期化されていない可能性があります

4

3 に答える 3

2

これを試して:

public static void main(String[] args) {
    class Listener implements ActionListener {
        int tick = 0;
        Timer timer = null;
        public void setTimer(Timer timer) {
            this.timer = timer;
        }
        public void actionPerformed(ActionEvent e) {
            tick++;
            if (tick > 4) {
                timer.stop();
            }
        }
    }
    Listener listener = new Listener();
    Timer timer = new Timer(1000, listener);
    listener.setTimer(timer);
    timer.setInitialDelay(0);
}
于 2013-09-23T13:29:57.910 に答える
1

別の方法は次のとおりです。

timer.stop()アクションではwriteの代わりに実行されます((Timer)e.getSource()).stop();

于 2013-09-23T13:55:12.750 に答える
0

問題は、タイマーを2回宣言することです

Timer timer;

final Timer timer = new Timer(1000, new ActionListener() {
...

行を削除するだけです:

Timer timer;
于 2013-09-23T13:51:03.280 に答える