我在Java中实现了以下代码。
public class FadeLabel extends javax.swing.JLabel {
private Timer onTimer;
public FadeLabel() {
init();
}
private void init(){
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
onTimer = new Timer(100, (ActionEvent e) -> {
// animation code
});
}
@Override
public void setText(String text) {
onTimer.start();
super.setText(text);
}
}
当我创建此类的对象时,它会在NullPointerException
方法中为setText()
提供行onTimer.start()
。
我想知道为什么会发生这种异常..?
ps:我知道什么是NullPointerException
。我想知道它是如何生成的......
这是我实例化的方式。
notificationLabel = new FadeLabel();
答案 0 :(得分:8)
查看JLabel
public JLabel() {
this("", null, LEADING);
}
public JLabel(String text, Icon icon, int horizontalAlignment) {
setText(text);
setIcon(icon);
setHorizontalAlignment(horizontalAlignment);
updateUI();
setAlignmentX(LEFT_ALIGNMENT);
}
因此我们可以看到无参构造函数调用另一个,然后调用setText
。但是,此时您的init
方法无法运行,因此onTimer
仍为NULL
。
答案 1 :(得分:-3)
您可以在onTimer上定义属性。你有一个方法init。您必须调用它来实例化定时器属性onTimer。