2013-01-21 23 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