关于Swing计时器的一些问题

时间:2012-11-26 07:36:47

标签: java swing timer

package xyz;

import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class XYZ {

    public static void main(String[] args) throws InterruptedException {

        class TimeClass implements ActionListener {

            private int counter = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                counter++;
                System.out.println(counter);
            }

        }

        Timer timer;
        TimeClass tc = new TimeClass();
        timer = new Timer (100, tc);
        timer.start();
        Thread.sleep(20000);

    }
}

在上面的代码中:

  1. 应在main()函数内创建TimeClass。否则,它会显示错误“非静态变量,这不能从静态上下文中引用”。这是为什么?

  2. 当我使用TimeClass的访问说明符(如public或private)时,我遇到了非法的表达式错误启动。这是为什么?

1 个答案:

答案 0 :(得分:5)

  1. 如果要在main方法之外定义TimeClass,它应该是静态的。因为您试图从静态方法(主)访问它。无法从静态块或方法访问非静态变量。

  2. 如果要在方法中定义类(如您的情况),则无法为其定义任何访问说明符。因为它只能在你的方法中访问,没有人可以在这种方法之外看到或使用它。

  3. 将您的代码更改为类似的内容,然后就可以了:

    public class Test {
    
        private static class TimeClass implements ActionListener {
    
            private int counter = 0;
    
            @Override
            public void actionPerformed(ActionEvent e) {
                counter++;
                System.out.println(counter);
            }
    
        }
    
        public static void main(String[] args) throws InterruptedException {    
    
            TimeClass tc = new TimeClass();
            Timer timer = new Timer (100, tc);
            timer.start();
            Thread.sleep(20000);    
        }
    }