我有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的一个问题。
答案 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);