首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java - NullPointerException开始。Swing错误或错误的实现?

Java - NullPointerException开始。Swing错误或错误的实现?
EN

Stack Overflow用户
提问于 2010-12-07 21:03:35
回答 3查看 688关注 0票数 0

我正在为一家公司开发一个应用程序,该公司以各种方式管理oracle数据库。这个程序是用Java,NetBeans编写的,而且它变得很大。我不会说它写得很好,但我经常回到旧的糟糕的代码,并试图让它尽可能地可读性和oop。

我已经注意到,当我启动程序时,每10次中就有1次得到以下异常:(尽管程序启动并正常工作,即使这些时候也是如此)

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.plaf.synth.SynthLabelUI.getMinimumSize(SynthLabelUI.java:199)
    at javax.swing.JComponent.getMinimumSize(JComponent.java:1702)
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:2933)
    at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2897)
    at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1315)
    at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2904)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1050)
    at javax.swing.GroupLayout.prepare(GroupLayout.java:1037)
    at javax.swing.GroupLayout.preferredLayoutSize(GroupLayout.java:857)
    at java.awt.Container.preferredSize(Container.java:1599)
    at java.awt.Container.getPreferredSize(Container.java:1584)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1624)
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedPreferredSize(GroupLayout.java:2944)
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:2930)
    at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2897)
    at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1315)
    at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2904)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588)
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
    at javax.swing.GroupLayout$SequentialGroup.setValidSize(GroupLayout.java:1972)
    at javax.swing.GroupLayout$Group.setSize(GroupLayout.java:1553)
    at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1058)
    at javax.swing.GroupLayout.layoutContainer(GroupLayout.java:897)
    at java.awt.Container.layout(Container.java:1421)
    at java.awt.Container.doLayout(Container.java:1410)
    at java.awt.Container.validateTree(Container.java:1507)
    at java.awt.Container.validateTree(Container.java:1513)
    at java.awt.Container.validateTree(Container.java:1513)
    at java.awt.Container.validateTree(Container.java:1513)
    at java.awt.Container.validateTree(Container.java:1513)
    at java.awt.Container.validateTree(Container.java:1513)
    at java.awt.Container.validate(Container.java:1480)
    at java.awt.Window.dispatchEventImpl(Window.java:2473)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

我假设这是一个swing bug。这会是我的实现中的一个问题吗?为什么这种情况每10次中就有1次发生,而不是总是发生?我能做些什么来避免它吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-07 21:09:58

每10个人中就有1个听起来可能是某个地方的竞争状况。正如@willcodejavaforfood提到的,您需要确保所有GUI更改(包括启动)都在事件分派线程(EDT)上完成。

您可以使用SwingUtilities.invokeAndWaitSwingUtilities.invokeLater来确保代码在EDT上执行。

票数 2
EN

Stack Overflow用户

发布于 2010-12-07 21:13:58

SynthDefaultLookup.java的第27行中有这样的内容:

代码语言:javascript
复制
public Object getDefault(JComponent c, ComponentUI ui, String key) {
    if (!(ui instanceof SynthUI)) {
        Object value = super.getDefault(c, ui, key);
        return value;
    }
    SynthContext context = ((SynthUI)ui).getContext(c);
    Object value = context.getStyle().get(context, key); // line 27
    context.dispose();
    return value;
}

..。也许是componentUI的上下文?你有没有一些没有ComponentUI的特殊UI?

(好的,这不是一个答案,我道歉,但这也不是一个评论)

票数 1
EN

Stack Overflow用户

发布于 2010-12-07 21:09:29

它看起来像是UI提供了一个NullPointerException,但它并不只是在那里和在那里。UI使用的其他东西可能不能正常工作,或者类似的东西。你能在这里发布整个错误和导致它的代码片段吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4376858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档