2016-04-13 15 views
1

我有MenuButton,它擴展了AbstractButton。當我在類中做setEnabled(true)時,沒有編譯器錯誤,但運行時錯誤爲NullPointerException。 (請注意,當擴展JButton時,完全相同的代碼工作正常)。相關部分如下。NullPointerException爲AbstractButton.setEnabled(true)

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

@StefanBeike https://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html#setEnabled(boolean) –

回答

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()); 
+0

工作,感謝噸! –

2

你不能在構造函數中做到這一點。你應該初始化你的MenuItem並且啓用它

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

沒有,沒有工作。在不同的地方出現同樣的錯誤。 –

+0

您是否正確初始化對象?如在,給參數? – Ricardo

+0

是的。就像我說的,它作爲一個JButton很好。 –

相關問題