AbstractButton.setEnabled的NullPointerException(true)

时间:2016-04-13 14:01:00

标签: java nullpointerexception

我有MenuButton,扩展了AbstractButton。当我在类中setEnabled(true)时,没有编译器错误,但运行时错误为NullPointerException。 (注意,完全相同的代码在扩展JButton时工作正常)。相关部分如下。

public class MenuItem extends AbstractButton{
    private String type = "";
    private String text = "";
    private int level;
public MenuItem(String place, String name, int height) {
        type = place;
        text = name;
        level = height;
        setEnabled(true); //This is where the error occurs.
    }
}

错误:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.AbstractButton.setEnabled(Unknown Source)
    at states.MenuItem.<init>(MenuItem.java:54)
    at states.MainMenu.<init>(MainMenu.java:26)
    at main.TheDarkSeaIslesPlatformer.main(TheDarkSeaIslesPlatformer.java:80)

这不是重复的,因为它已被正确初始化。它在扩展JButton时也有效,因此它是AbstractButton的一个问题。

2 个答案:

答案 0 :(得分:3)

您需要定义按钮模型。这是AbstractButton中的setEnabled方法。

/**
 * Enables (or disables) the button.
 * @param b  true to enable the button, otherwise false
 */
public void setEnabled(boolean b) {
    if (!b && model.isRollover()) {
        model.setRollover(false);
    }
    super.setEnabled(b);
    model.setEnabled(b);
}

最简单的方法是在setEnabled之前的构造函数中设置它。

    setModel(new DefaultButtonModel());

答案 1 :(得分:2)

您无法在构造函数中执行此操作。您应该在需要的地方初始化MenuItem并启用它

MenuItem menuItem = new MenuItem();
menuItem.setEnabled(true);