2008-12-04 57 views
1

我一直在我的应用程序中获得这个NPE,我似乎无法摆脱它,因为它没有出现在我的任何源代码中。正如你从堆栈跟踪中看到的那样,它不是在我的代码中发生的,而是在Swing平台中。你们有没有遇到过这个问题,并且可能知道这里发生了什么?

11:28:23,273 [AWT-EventQueue-0] ERROR [is.althingi.styran.utlit.styran.StyranImpl] 
    - uncaughtException 
    java.lang.NullPointerException 
    at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(Unknown Source) 
    at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(Unknown Source) 
    at java.awt.AWTEventMulticaster.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.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) 

回答

8

我设法解决了这个问题!

问题是我在我的JTable上加了一个ListSelectionListener;在我的听众的valueChanged方法中,我然后打电话scrollRectToVisible,然后updateUI,然后导致我的例外。

我所做的是增加invokeLater围绕updateUI通话和没有更多的例外

像这样:

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     updateUI(); 
    } 
    }); 

现在,我有“答案”我的问题(虽然我不知道我还明白为什么invokeLater帮助?),我觉得我的问题不是好足够。我没有提供足够的有关我的问题的信息,任何人都无法回答问题。在问我之前,我应该更多地研究过这个问题吗?我不知道。

也许我提供帮助我的解决方案就够了!

+0

当你调用invokeLate()时,你将updateUI()函数调用移动到事件队列的末尾。我的猜测是updateUI()调用尝试访问尚未创建的对象,但此对象不久后可用。 – 2009-01-20 21:13:30

2

我从未有过这方面的问题,但是当我拿到这几样“隐藏”的错误,我总是最后寻找原始的源代码,并试图找出问题...

从这个source您可以看到发生异常的功能:

private void setValueIsAdjusting(boolean flag) { 
    table.getSelectionModel().setValueIsAdjusting(flag); 
    table.getColumnModel().getSelectionModel(). 
    setValueIsAdjusting(flag); 
} 

您可以确认您的表格选择模型;柱模型;列选择模型不为null?

+0

我怎么能?那里有一个NPE,不在吗?但当然,事情是,我似乎无法弄清楚为什么其中一个是空的,因为无论我把它放在哪里,我都不会调用它们! – 2009-01-20 20:46:06

相关问题