Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BoxLayout中的NullPointerException_Java_Swing_Nullpointerexception_Boxlayout - Fatal编程技术网

Java BoxLayout中的NullPointerException

Java BoxLayout中的NullPointerException,java,swing,nullpointerexception,boxlayout,Java,Swing,Nullpointerexception,Boxlayout,有人知道如何在JavaSwing中调试这个错误吗 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:282) at java.awt.Container.preferredSize(Container.java:1599) at java.awt.Container

有人知道如何在JavaSwing中调试这个错误吗

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:282)
    at java.awt.Container.preferredSize(Container.java:1599)
    at java.awt.Container.getPreferredSize(Container.java:1584)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
    at java.awt.BorderLayout.layoutContainer(BorderLayout.java:804)
    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.validate(Container.java:1480)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1429)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPaneUI.java:1449)
    at javax.swing.plaf.synth.SynthTabbedPaneUI.setRolloverTab(SynthTabbedPaneUI.java:491)
    at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2384)
    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.validate(Container.java:1480)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1429)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPaneUI.java:1449)
    at javax.swing.plaf.synth.SynthTabbedPaneUI.setRolloverTab(SynthTabbedPaneUI.java:498)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.setRolloverTab(BasicTabbedPaneUI.java:558)
    at javax.swing.plaf.basic.BasicTabbedPaneUI.access$2000(BasicTabbedPaneUI.java:37)
    at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mouseMoved(BasicTabbedPaneUI.java:3645)
    at java.awt.Component.processMouseMotionEvent(Component.java:6333)
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3285)
    at java.awt.Component.processEvent(Component.java:6057)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4251)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    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)
它是在
BoxLayout
中从此方法抛出的(行
size=…


如果你能找到那一行,那么很可能xTotal.preferred为null,或者yTotal.preferred为null。

从我能看到的代码量来看,我猜你是在尝试使用swing coponent而不使用

这会导致像上面这样的异常。我在一个项目中遇到了这个问题,我意识到解决这个问题太晚了,所以我把所有的东西都放在了try cat中,没有打印整个堆栈跟踪

如果这确实是问题所在,您可能会捕获并忽略空指针异常


最好的方法是使用事件调度线程来扩展布局管理器以提供同步,但这种方法不太可能有效。验证所有GUI组件都是在上构造的。同样,请使用或来验证是否在上更新了所有数据模型。

因为错误发生在“Swing”中(只有堆栈跟踪上的
java*
类),所以我会仔细查看我的代码,以确保所有Swing调用都发生在上

xTotal和yTotal在哪里初始化?此错误来自GUI启动或切换时。。。RTM+1P.s我相信您的代码可能仍然是功能性的,并且只要异常不停止执行,维度可能最终会被创建。。。我可能也完全错了:)显然:p但这并没有真正的帮助。你问如何开始调试。。。这是开始:)我要做的是在那里设置一个断点,然后检查变量。如果其中一个为空,那么您需要追溯到初始化这些组件的位置并找出原因。我想我在添加组件或编辑组件时使用
invokeLater
,但在更新模型时不使用。注意,从process方法内部变异tableModel是安全的,因为它是在事件分派线程上调用的;repaint默认情况下会创建EDT,不是吗,但是这个线程对我来说不清楚,OPs和每个帖子都是暗中拍摄的,因为不可见的容器总是返回null,只是GetPreferedSize可以返回,我的视图没有任何内容给你的好心人:-)作为替代+1@mKorbel:谢谢你的评论;没有冒犯@巴特:是的,模拟火灾事件来更新相应的视图,这必须发生在EDT上。我找到了,虽然不是很明显。首先,我把所有的东西都搬到了EDT,这没用。然后我发现我的自定义列表模型(对于
BoxLayout
容器中的列表)在
getElementAt
中抛出了
ArrayIndexOutOfBoundsException
(我扩展了
DefaultListModel
,但应该扩展了
AbstractListModel
),Swing显然无法处理,这导致了进一步的错误。
public Dimension preferredLayoutSize(Container target) {
Dimension size;
synchronized(this) {
    checkContainer(target);
    checkRequests();
    size = new Dimension(xTotal.preferred, yTotal.preferred);
}