2013-09-26 2 views
1

Я реализую свою собственную модель из интерфейса TableModel. Моя проблема заключается в построении моей модели. Я передаю как аргументы Object [] [], такие как данные, полученные из базы данных, и Object [], подобные заголовкам, также считываемым из базы данных.ошибка в setModel builder

В интерфейсе tableModel у меня есть ArrayList, где я сохраняю данные, данные из БД.

Как скопировать мой объект [] [] из двух измерений в мой ArrayList.

В следующих строках я показываю свой код, где вы можете видеть, что я делаю.

public class MiModelo implements TableModel{ 

private ArrayList<TableModelListener> listeners=new ArrayList<TableModelListener>(); 

private ArrayList<Object[]> datos=new ArrayList<Object[]>(); 

private ArrayList<String> titulos=new ArrayList<String>(); 

public MiModelo(Object[][] obj, Object[] head){ 
    Object[] registro; 
    for (int i=0;i<obj.length;i++){ 
     registro=new Object[obj[i].length]; 
     for (int k=0;k<obj[i].length;k++){ 
      registro[k]=obj[i][k]; 
     } 
     System.out.println(registro[0]+", "+registro[1]+", "+registro[2]+", "+registro[3]); 
     datos.add(registro); 
    } 


    for (int i1=0;i1<head.length;i1++) 
     titulos.add((String) head[i1]); 
} 

Для некоторых рекомендаций этот строитель не работает. В Eclipse это показывает следующее сообщение об ошибке:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at javax.swing.JTable.prepareRenderer(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source) 
at javax.swing.plaf.ComponentUI.update(Unknown Source) 
at javax.swing.JComponent.paintComponent(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JViewport.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at java.awt.Window.paint(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$1000(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(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$1.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) 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at javax.swing.JTable.prepareRenderer(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source) 
at javax.swing.plaf.ComponentUI.update(Unknown Source) 
at javax.swing.JComponent.paintComponent(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JViewport.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at java.awt.Window.paint(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$1000(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(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$1.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) 

В коде, как вы можете видеть, я прописан System.out.println, чтобы увидеть, если это чтение из базы данных, и Aparently это нормально.

Заранее спасибо.

+2

Можете ли вы написать свою трассировку стека исключения? – Ketan

+0

Я только что сделал это. – galeonweb

ответ

1

В вашей реализации TableModel нет никаких средств для добавления JTable в качестве слушателя к его модели, как того требует интерфейс TableModel. Вместо этого добавьте AbstractTableModel, который обеспечивает необходимую реализацию. EnvTableTest является основным примером.

Если это не проблема, пожалуйста, отредактируйте ваш вопрос, чтобы включить sscce и трассировку стека, которая показывает проблему, которую вы описываете.

+0

Хорошо, я исправил проблему, простирающуюся от AbstractTableModel, и она работает, но я бы хотел использовать интерфейс TableModel, чтобы увидеть, как она работает. В любом случае, спасибо – galeonweb

+0

Рад, что это помогло; изучите источник «AbstractTableModel» в качестве примера. Через какое-то время вы можете принять этот ответ, щелкнув по [пустой галочке] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) в левый. – trashgod