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不具有相同值的原因是因为 a具有Timer初始延迟(设置为构造函数中提供的延迟)。调用后需要 100 毫秒start才能使y' 的值增加 1。同时,xTest允许尽可能快地增加。

于 2013-03-02T21:37:12.260 回答