Pointers 侦听器类中的NullPointerException
基本上,我现在有这个GUI: 它应该做的是将左滚动窗格中所有突出显示的项目添加到右滚动窗格中。但是,每当我按下“添加”按钮时,就会得到一个NullPointerException。执行allColsPanel.getList().getSelectedValuesList()时,AddListener的actionPerformed下的ColumnMainPanel类中会发生错误 我的代码如下所示: 在主框架中: 主面板: 在ColumnMainPanel构造函数中初始化allColsPanel之后,我立即检查了它,它不为null。但是,当我检查AddListener下的allColsPanel是否为null时,它返回true。我错过了什么?我做错了什么 以下是我得到的错误:Pointers 侦听器类中的NullPointerException,pointers,exception,null,listener,Pointers,Exception,Null,Listener,基本上,我现在有这个GUI: 它应该做的是将左滚动窗格中所有突出显示的项目添加到右滚动窗格中。但是,每当我按下“添加”按钮时,就会得到一个NullPointerException。执行allColsPanel.getList().getSelectedValuesList()时,AddListener的actionPerformed下的ColumnMainPanel类中会发生错误 我的代码如下所示: 在主框架中: 主面板: 在ColumnMainPanel构造函数中初始化allColsPane
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mhhls.him.dbtoexcelgui.main.ColumnMainPanel$AddListener.actionPerformed(ColumnMainPanel.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
将带有完整堆栈跟踪的异常添加到问题中。我看不到与调用签名匹配的构造函数。对不起,您在谈论哪个构造函数和哪个调用?
new column mainpanel(allColumns)
指定单个参数。我没有看到这样的构造函数。我的错,我只是在复制粘贴时忘记删除其他参数。这不是问题所在。
public class ColumnMainPanel extends JPanel {
private AllColumnsPanel allColsPanel;
private SelectedColumnsPanel selColsPanel;
private CentralButtonsPane buttonPane;
public ColumnMainPanel() {
allColsPanel = null;
selColsPanel = null;
buttonPane = null;
}
public ColumnMainPanel(String[] allColumns) {
super(new BorderLayout());
this.dbe = d;
setSize(250, 700);
allColsPanel = new AllColumnsPanel(allColumns);
selColsPanel = new SelectedColumnsPanel(allColumns.length);
buttonPane = new CentralButtonsPane();
add(allColsPanel, BorderLayout.WEST);
add(buttonPane, BorderLayout.CENTER);
add(selColsPanel, BorderLayout.EAST);
}
class AddListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//int index = list.getSelectedIndex();
String[] columnsSelected;
// This next line is where I get the error:
List<String> selectedValues = allColsPanel.getList().getSelectedValuesList();
columnsSelected = new String[selectedValues.size()];
columnsSelected = (selectedValues).toArray(columnsSelected);
selColsPanel.addToList(columnsSelected);
}
}
//add RemoveListener and ExportListener here
}
public class AllColumnsPanel extends ColumnMainPanel implements ListSelectionListener {
private JList<String> list;
private DefaultListModel<String> listModel;
private int numListItems;
public AllColumnsPanel(String[] allColumns) {
setSize(300, 300);
this.numListItems = allColumns.length;
listModel = createListModel(allColumns);
list = createList(listModel);
JScrollPane listScrollPane = new JScrollPane(list);
listScrollPane.setPreferredSize(new Dimension(300, 300));
add(listScrollPane);
}
public DefaultListModel<String> createListModel(String[] cols) {
DefaultListModel<String> result = new DefaultListModel<String>();
for(int i = 0; i < cols.length; i ++) {
result.addElement(cols[i]);
}
return result;
}
public JList<String> createList(DefaultListModel<String> listModel) {
JList<String> result = new JList<String>(listModel);
result.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
result.setSelectedIndex(0);
result.addListSelectionListener(this);
result.setVisibleRowCount(5);
return result;
}
public JList<String> getList() {
return list;
}
public boolean isEmpty() {
return numListItems < 1;
}
}
public class CentralButtonsPane extends ColumnMainPanel {
private static final String addString = "Add";
private static final String removeString = "Remove";
private static final String exportString = "Export";
public CentralButtonsPane() {
setLayout((new BoxLayout(this, BoxLayout.Y_AXIS)));
setSize(50, 40);
add(createAddButton());
add(createRemoveButton());
add(createExportButton());
}
public JButton createAddButton() {
JButton result = new JButton(addString);
result.setActionCommand(addString);
result.setSize(50, 20);
result.setAlignmentX(Component.CENTER_ALIGNMENT);
result.addActionListener(new AddListener());
return result;
}
}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mhhls.him.dbtoexcelgui.main.ColumnMainPanel$AddListener.actionPerformed(ColumnMainPanel.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)