Stacktrace仅包含java库调用的异常

Chr*_*ert 8 java error-handling swing jtable stack-trace

如果错误的堆栈跟踪(不在主线程中发生)不包含任何方法,可以采取什么可能的行动来找出问题所在?有问题的完整痕迹:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Unknown Source)
    at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
    at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderRenderer(Unknown Source)
    at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderHeight(Unknown Source)
    at javax.swing.plaf.basic.BasicTableHeaderUI.createHeaderSize(Unknown Source)
    at javax.swing.plaf.basic.BasicTableHeaderUI.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at javax.swing.ViewportLayout.preferredLayoutSize(Unknown Source)
    at java.awt.Container.preferredSize(Unknown Source)
    at java.awt.Container.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$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)
Run Code Online (Sandbox Code Playgroud)

我当前正在尝试使用SwingWorker在后台运行一个进程,最后使用新数据更新JTable.与此任务相关的所有代码都太大了,无法在此发布,我想知道是否有办法缩小错误的来源.

Rob*_*bin 6

堆栈跟踪可能不包含您的任何方法,但并不意味着它不包含您创建的任何对象.在这种情况下,问题很可能位于您的TableModel.

为了调试这样的堆栈跟踪,我通常使用以下方法之一:

  • 做一些思考你使用那些标准JDK类的地方,通过查看堆栈跟踪,你已经可以很好地了解出现了什么问题(可以通过这个问题的答案看到,因为我们只有堆栈跟踪)
  • 在IDE中放置一个"异常断点",它至少允许您使用调试器并获得更多信息,然后在堆栈跟踪中获得更多信息.可能会更容易识别您自己的对象,并在您的代码中找到问题所在的位置
  • 将JDK源代码附加到项目中,并在JDK源代码中放置常规断点,以便开始调试.
  • 而不是使用标准的JDK对象,例如,使用常规JDK类的匿名扩展,并通过调用覆盖有问题的方法super.这允许您在有问题的对象的有问题的方法中放置断点

这一切都归结为(除了第一种方法)相同:让我的调试器运行,以便我可以更仔细地检查所有相关对象,以了解出了什么问题.一旦你理解了这个问题,修复它大部分时间都是微不足道的


FTh*_*son 5

您的JTable(或您的新模型)没有列,在内部代码调用时导致ArrayIndexOutOfBoundsException DefaultTableColumnModel.getColumn.

确保您的表的大小不是0.