创建一个更新java中标签的计时器

时间:2018-04-18 19:00:46

标签: java timer interface frame

我的测试学习指南中的一个问题包括创建一个计时器,它每500毫秒将数字标签的值增加1。此计时器应显示在一个框架中。 这是我为类创建的代码,它使计时器和更新框架中的值;

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

import javax.swing.JFrame;
import javax.swing.JLabel;


public class TimerFrame extends JFrame {

private JLabel numericLabel;
private int number;



class AddListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        number = number ++;
        numericLabel.setText(number + "\n");
    }

}

public TimerFrame() {
    number = 0;
    setSize(300,400);
    ActionListener listener = new AddListener();
    Timer t = new Timer(500, listener);
    numericLabel=new JLabel();
    this.add(numericLabel);
    t.start();
}



}

这是我的主要类,它将使框架可见:

import javax.swing.JFrame;


public class TimerFrameTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        JFrame frame = new TimerFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

当我运行主类时,会弹出一个框架,但框架上没有数字(标签不会显示)。所以基本上它只是一个空框架。有没有人知道如何解决这个问题并让计时器每500毫秒更改一次标签?

更新;结果应该是可见的因为我将它添加到面板中。但现在,我在线程主"中收到错误"异常

我收到的错误如下:

Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Container.java:1040)
    at java.awt.Container.add(Container.java:958)
    at javax.swing.JFrame.addImpl(JFrame.java:540)
    at java.awt.Container.add(Container.java:363)
    at TimerFrame.<init>(TimerFrame.java:27)
    at TimerFrameTest.main(TimerFrameTest.java:9)

更新:使用上面更新的代码,新问题是计时器显示并且只是说&#34; 0&#34;并且不会增加任何价值。

1 个答案:

答案 0 :(得分:0)

您没有将标签添加到框架中。在你的构造函数中做

this.add(numericLabel);

编辑:我想你需要在添加之前创建标签。 :)

numericLabel = new JLabel();
this.add(numericLabel);