/ / Невідома помилка у додатку Java Swing - java, swing, jtable, indexoutofboundsexception, defaulttablemodel

Невідома помилка у додатку Java-Swing - java, swing, jtable, indexoutboundsexception, defaulttablemodel

Привіт, я використовую другу потік, щоб оновити DefaultTableModel JTable кожні 2 секунди і апаратно випадково, він викидає мені наступну помилку.

Виняток у потоці "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2> = 2 at java.util.Vector.elementAt (Vector.java:470) at javax.swing.table.DefaultTableModel.getValueAt (DefaultTableModel.java: 649) at javax.swing.JTable.getValueAt (JTable.java: 2716) at javax.swing.JTable.prepareRenderer (JTable.java: 5714) at javax.swing.plaf.basic.BasicTableUI.paintCell (BasicTableUI.java: 218) at javax.swing.plaf.basic.BasicTableUI.paintCells (BasicTableUI.java:2010) at javax.swing.plaf.basic.BasicTableUI.paint (BasicTableUI.java: 1 806) at javax.swing.plaf.ComponentUI.update (ComponentUI.java: 161) at javax.swing.JComponent.paintComponent (JComponent.java: 769) at javax.swing.JComponent.paint (JComponent.java:1045) at javax.swing.JComponent.paintChildren (JComponent.java: 878) at javax.swing.JComponent.paint (JComponent.java:1054) at javax.swing.JViewport.paint (JViewport.java: 731) at javax.swing.JComponent.paintChildren (JComponent.java: 878) at javax.swing.JComponent.paint (JComponent.java:1054) at javax.swing.JComponent.paintToOffscreen (JComponent.java:5212) at javax.swing.BufferStrategyPaintManager.paint (BufferStrategyPaintManager.java:295) at javax.swing.RepaintManager.paint (RepaintManager.java: 1236) at javax.swing.JComponent._paintImmediately (JComponent.java:5160) at javax.swing.JComponent.paintImmediately (JComponent.java:4971) at javax.swing.RepaintManager $ 3.rune (RepaintManager.java: 796) at javax.swing.RepaintManager $ 3.rune (RepaintManager.java: 784) at java.security.AccessController.doPrivileged (рідний метод) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java: 76) at javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java: 784) at javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java: 757) at javax.swing.RepaintManager.prePaintDirtyRegions (RepaintManager.java: 706) at javax.swing.RepaintManager.access 1000 $ (RepaintManager.java: 62) at javax.swing.RepaintManager $ ProcessingRunnable.run (RepaintManager.java: 1651) at java.awt.event.InvocationEvent.dispatch (InvocationEvent.java: 251) at java.awt.EventQueue.dispatchEventImpl (EventQueue.java: 727) на java.awt.EventQueue.access $ 200 (EventQueue.java:103) at java.awt.EventQueue $ 3.run (EventQueue.java: 688) at java.awt.EventQueue $ 3.run (EventQueue.java: 686) at java.security.AccessController.doPrivileged (рідний метод) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java: 76) at java.awt.EventQueue.dispatchEvent (EventQueue.java: 697) 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)

Програма продовжує працювати чудово, але я не знаю, де виникає помилка в моєму коді, тому що жоден з моїх класів не з'являється в трасі стеку.

Відповіді:

7 для відповіді № 1

Ласкаво просимо в чудовий світ порушення порушення потоку подій (та умов перегонів).

В принципі, ви ніколи не повинні оновлювати (прямо чи опосередковано) будь-який компонент інтерфейсу з будь-якої іншої потоку, ніж EDT.

В основному, коли ви оновлюєте свою TableModel, він запускає подію, яка була схоплена по таблиці, яка намагається оновити сама по собі, але стан моделі в потоці і не має сенсу до таблиці ...

Замість цього спробуйте використати a SwingWorker щоб оновити модель, використовуючи методи публікації та обробки, щоб синхронізувати оновлення з EDT

Перевірити Паралельність Swing для більш детальної інформації та прикладів.