覆盖JLabel

时间:2017-10-12 07:51:57

标签: java swing nullpointerexception jlabel

我在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();

2 个答案:

答案 0 :(得分:8)

查看JLabel

source code
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。