2014-07-07 99 views
-2

我正在Java GUI中顯示一個表。用戶可以通過單擊「添加行」按鈕來添加行,並編輯表格中單元格的值。我現在試圖添加一個方法來通過單擊「刪除行」按鈕從表中刪除選定的行。將監聽器添加到JButton時發生Java NullPointerException

我已經宣佈按鈕作爲全局變量:

public JButton removeBtn = null; 

然後我加入監聽器按鈕,在我的addListeners()方法:

private void addListeners(){ 
    .... 
    removeBtn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      int selectedRow = jEntityFilterTable.getSelectedRow(); 
      DefaultTableModel model = (DefaultTableModel)jEntityFilterTable.getModel(); 
      model.removeRow(selectedRow); 
     } 
    }); 
} 

然而,當我現在嘗試運行我的代碼,我得到一個NullPointerException這是阻止它運行...異常說:

異常在線程「主要」顯示java.lang.NullPointerException

它在抱怨的線路有:

removeBtn.addActionListener(new ActionListener(){ 

(我猜意味着它可能是代碼的時鐘裏的任何東西上面,我在那裏「M添加ActionListener

addListeners(); 

(其中我打電話addListeners()方法),和

JConfigurationPane panel = new JConfigurationPane(); 

(我在初始化JConfigurationPane在我的main()方法。任何人都可以發現我在這裏做錯了嗎?

+3

'public JButton removeBtn = null;'它是'null'。你必須在添加一個ActionListener之前初始化它* – BackSlash

+0

你在哪裏初始化你的按鈕?從你發佈的代碼中'removeBtn'是'null'。 – Narmer

+0

@BackSlash說什麼。 Plus:「(我猜這意味着它可能是上面的代碼塊中的任何內容,我添加了ActionListener)」 - 否。該塊中的東西是你的ActionListener。它在執行操作時運行,而不是在添加操作時運行。 –

回答

1

您還沒有初始化的變量removeBtn。更換

public JButton removeBtn = null; 

public JButton removeBtn = new JButton("Remove"); 

在你當前的代碼,上線

removeBtn.addActionListener(new ActionListener(){ 

removeBtn沒有指向一個對象,因此沒有什麼可調用addActionListener方法,方法上。因此,您收到一個NullPointerException。

+0

感謝您的回答。我已經給出了一個結論,並且清除了我正在獲取的'NullPointerException',但由於某種原因,當我單擊按鈕時,所選行不會從表中刪除。我已經在'actionPerformed()'方法中添加了一些調試代碼,但是這從來不會顯示在控制檯中,所以似乎'actionPerformed()'方法內的代碼永遠不會被調用......任何想法? – someone2088

+0

@ someone2088我會爲新問題提出一個單獨的SO問題。確保你發佈了相關的代碼和你試過的東西等。 – JamesB

+0

我已經完成了 - 再次感謝。 – someone2088

0

嘗試初始化你的按鈕是這樣的:

removeBtn = new JButton("Remove"); 
+0

感謝您的回答。 – someone2088