0

I'm trying to implement my own TableModel but I keep getting a NullPointerException exception when the getRowCount method is called, but the associated data field is already initiated. I'm a bit confused how this can be happening.

public class TransactionsTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 527329780735382668L;

    private static final int DESCRIPTION_INDEX = 0;
    private static final int VALUE_INDEX = 1;

    private List<String> columnNames;
    private List<NatwestTransaction> data = new ArrayList<NatwestTransaction>();

    public TransactionsTableModel() {
        this.columnNames = new ArrayList<String>();
        this.columnNames.add("Description");
        this.columnNames.add("Value");
    }

    public void updateTable(List<NatwestTransaction> list) {
        data = list;
        fireTableDataChanged();
    }

    @Override
    public int getRowCount() {
        return data.size(); // line 31 - error here
    }

    @Override
    public int getColumnCount() {
        return columnNames.size();
    }

    @Override
    public String getColumnName(int index) {
        return columnNames.get(index);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        NatwestTransaction t = data.get(rowIndex);
        switch(columnIndex) {
            case DESCRIPTION_INDEX:
                return t.getDescription();
            case VALUE_INDEX:
                return t.getValue();
            default:
                return new Object();
        }
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public Class getColumnClass(int c) {
        switch(c) {
            case DESCRIPTION_INDEX:
                return String.class;
            case VALUE_INDEX:
                return Float.class;
            default:
                return Object.class;
        }
    }
 }

Here's the console output:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Transactions.TransactionsTableModel.getRowCount(TransactionsTableModel.java:31)
    at javax.swing.JTable.getRowCount(JTable.java:2662)
    at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1766)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at javax.swing.JComponent.paintComponent(JComponent.java:778)
    at javax.swing.JComponent.paint(JComponent.java:1054)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JViewport.paint(JViewport.java:731)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
    at javax.swing.JComponent.paintChildren(JComponent.java:887)
    at javax.swing.JComponent.paint(JComponent.java:1063)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1529)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:808)
    at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
    at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Transactions.TransactionsTableModel.getRowCount(TransactionsTableModel.java:31)
    at javax.swing.JTable.getRowCount(JTable.java:2662)
    at javax.swing.plaf.basic.BasicTableUI.createTableSize(BasicTableUI.java:1692)
    at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(BasicTableUI.java:1733)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1660)
    at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:790)
    at java.awt.Container.layout(Container.java:1503)
    at java.awt.Container.doLayout(Container.java:1492)
    at java.awt.Container.validateTree(Container.java:1688)
    at java.awt.Container.validate(Container.java:1623)
    at javax.swing.RepaintManager$2.run(RepaintManager.java:691)
    at javax.swing.RepaintManager$2.run(RepaintManager.java:689)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:688)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1676)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Danielson
  • 2,605
  • 2
  • 28
  • 51
sooty1892
  • 327
  • 1
  • 3
  • 13

1 Answers1

1

The NullPointerException occurs at data.size() because you are trying to call the function size() on the object data, but most probably data is null and does not reference a List object.

A possible reason this could occur is that the updateTable(List<NatwestTransaction>) function is being called with null parameter, i.e. some part of your code is executing transactionsTableModelObject.updateTable(null) which causes data = list at line 25 to be executed as data = null, this overwrites the previous (initialized) value of data hence causing the problem.

Codi
  • 511
  • 3
  • 19