我的测试学习指南中的一个问题包括创建一个计时器,它每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;并且不会增加任何价值。
答案 0 :(得分:0)
您没有将标签添加到框架中。在你的构造函数中做
this.add(numericLabel);
编辑:我想你需要在添加之前创建标签。 :)
numericLabel = new JLabel();
this.add(numericLabel);