2014-07-07 59 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