2008-12-04 48 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

相關問題