0

私はこのタイマーを使って移動Star.pngしましたJFrame & JPanel

タイマーを持つ星を動かす関数:

private final static int HEIGHT = 300;
.
.//more code here
.
.
  x=y=0;
.
. 

public void downRight() {
    Timer localTimer = new Timer(100, null);
      localTimer.setRepeats(false);
    localTimer.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {    
                x++;
                y++;
                repaint();
        }
    });
    int xTest=0;
    while (y < HEIGHT) {
        System.out.println("x "+(++xTest)+" y "+y);
        localTimer.start();
   }
    System.out.println("Reached");
}

タイマーを実行して xTest,y 値をテストすると、次のことがわかりました。

x 1 y 0

x 2 y 0

x 3 y 0

..... More Outputs here

.....

x 1653 y 1

x 1654 y 1

......

......

x 285836 y 299

x 285837 y 299

Reached

ここで何が起こっているのでしょうか?両方が同じスコープにあるのに、なぜxTest大きすぎるのですか?y

4

1 に答える 1

5

xTesty同じ値がない理由は、aTimer初期遅延(コンストラクターで提供される遅延に設定される)があるためです。startの値が1増えるには、呼び出してから100ミリ秒かかりyます。その間、できるだけxTest速く増やすことができます。

于 2013-03-02T21:37:12.260 に答える