2013-01-21 33 views
0

當我在Linux平臺上運行我的應用程序時,它會拋出異常,並且無法在框架/面板中看到任何組件,相反,它會顯示灰色的屏幕,並且在單擊/移動鼠標時將顯示該組件指向組件之上。此外,我有動態測試更新按鈕,這也得到更新每個鼠標移動按鈕上方。重繪Linux平臺中的問題

注意:這個相同的應用程序在windows平臺下工作正常。

INFO | jvm 1 | main | 2013/01/21 15:14:23.995 | Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
INFO | jvm 1 | main | 2013/01/21 15:14:23.995 |  at javax.swing.plaf.basic.BasicButtonUI.getMinimumSize(BasicButtonUI.java:352) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.995 |  at javax.swing.JComponent.getMinimumSize(JComponent.java:1714) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.995 |  at java.awt.BorderLayout.minimumLayoutSize(BorderLayout.java:651) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.995 |  at java.awt.Container.minimumSize(Container.java:1651) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.995 |  at java.awt.Container.getMinimumSize(Container.java:1636) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at javax.swing.JComponent.getMinimumSize(JComponent.java:1716) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.FlowLayout.minimumLayoutSize(FlowLayout.java:448) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.minimumSize(Container.java:1651) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.getMinimumSize(Container.java:1636) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at javax.swing.JComponent.getMinimumSize(JComponent.java:1716) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.GridBagLayout.GetLayoutInfo(GridBagLayout.java:1094) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.GridBagLayout.getLayoutInfo(GridBagLayout.java:893) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.GridBagLayout.ArrangeGrid(GridBagLayout.java:2052) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.GridBagLayout.arrangeGrid(GridBagLayout.java:2008) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.GridBagLayout.layoutContainer(GridBagLayout.java:789) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.layout(Container.java:1421) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.doLayout(Container.java:1410) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validateTree(Container.java:1507) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validateTree(Container.java:1513) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validateTree(Container.java:1513) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validateTree(Container.java:1513) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validateTree(Container.java:1513) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.Container.validate(Container.java:1480) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:669) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:124) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventQueue.access$000(EventQueue.java:85) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventQueue$1.run(EventQueue.java:603) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventQueue$1.run(EventQueue.java:601) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.security.AccessController.doPrivileged(Native Method) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventQueue.dispatchEvent(EventQueue.java:612) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
INFO | jvm 1 | main | 2013/01/21 15:14:23.996 |  at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+3

我們不是嚮導,向我們展示您的代碼。 – atomman

+3

這似乎很模糊......也許嘗試從GUI中刪除東西的「標準」調試策略,直到它工作。然後你知道是什麼導致了這個問題。然後,如果谷歌搜索沒有直接給你答案,你可以編寫一個最小化的應用程序來重現錯誤,並在SO再次提問:「爲什麼這個代碼在Windows上工作,但在Linux上失敗」。 – hyde

+1

你的課程在哪裏,這些只是看起來像錯誤的一部分,它只是swing和awt。 – Adude11

回答

0

好了,讓我們深入的堆棧跟蹤了一會兒:

在javax.swing.plaf.basic.BasicButtonUI.getMinimumSize(BasicButtonUI.java:352)

讓我們看看那裏的代碼:

public Dimension getMinimumSize(JComponent c) { 
    Dimension d = getPreferredSize(c); 
View v = (View) c.getClientProperty(BasicHTML.propertyKey); 
if (v != null) { 
    d.width -= v.getPreferredSpan(View.X_AXIS) - v.getMinimumSpan(View.X_AXIS); // Line 352 
} 
return d; 
} 

好的,那麼你的NullPointerException我來自getPreferredSize(JComponent c),它返回null

因此,最終,無論您的按鈕是否包含其他組件,或者在Linux上選擇的外觀和感覺都會返回null的值(無論出於何種原因,無法找到更少的細節)。

+0

非常感謝。我確實認爲這可能只是因爲外觀和感覺。我將爲Linux測試不同的外觀和感覺。 – user1280096

+0

任何人都可以建議喜歡定製外觀和感覺來支持Linux平臺。我試圖使用GTK的外觀和感覺,但GUI的行爲比較陌生,我想與Windows的外觀相似。 – user1280096

+0

當我運行我的應用程序時,按鈕顏色沒有得到更新,而是動態顯示。 – user1280096