Java NullPointerException综合实验室

Java NullPointerException综合实验室,java,nullpointerexception,Java,Nullpointerexception,我有一个我不明白的NullPointerException。通常,发生这种情况时,控制台会指向代码中的一行。这一次,它指向 位于javax.swing.plaf.synth.SynthLabelUI.getPreferredSize(SynthLabelUI.java:238) 据我所知,这不在我的代码中。有人能给我解释一下发生了什么事吗 线程“AWT-EventQueue-1”java.lang.NullPointerException中的异常 位于javax.swing.plaf.synt

我有一个我不明白的
NullPointerException
。通常,发生这种情况时,控制台会指向代码中的一行。这一次,它指向

位于javax.swing.plaf.synth.SynthLabelUI.getPreferredSize(SynthLabelUI.java:238)
据我所知,这不在我的代码中。有人能给我解释一下发生了什么事吗

线程“AWT-EventQueue-1”java.lang.NullPointerException中的异常 位于javax.swing.plaf.synth.SynthLabelUI.getPreferredSize(SynthLabelUI.java:238) 位于javax.swing.JComponent.getPreferredSize(JComponent.java:1660) 位于javax.swing.plaf.basic.BasicSliderUI.getHeightOfTallestLabel(BasicSliderUI.java:775) 在javax.swing.plaf.synth.SynthSliderUI.layout(SynthSliderUI.java:378) 在javax.swing.plaf.synth.SynthSliderUI.calculateGeometry(SynthSliderUI.java:343)上 位于javax.swing.plaf.basic.BasicSliderUI$Handler.ComponentResistized(BasicSliderUI.java:1496) 位于java.awt.Component.processComponentEvent(Component.java:6331) 位于java.awt.Component.processEvent(Component.java:6285) 位于java.awt.Container.processEvent(Container.java:2229) 位于java.awt.Component.dispatchEventImpl(Component.java:4861) 位于java.awt.Container.dispatchEventImpl(Container.java:2287) 位于java.awt.Component.dispatchEvent(Component.java:4687) 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) 在java.awt.EventQueue.access$200(EventQueue.java:103) 在java.awt.EventQueue$3.run(EventQueue.java:682) 在java.awt.EventQueue$3.run(EventQueue.java:680) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在java.awt.EventQueue$4.run(EventQueue.java:696) 在java.awt.EventQueue$4.run(EventQueue.java:694) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:693) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 我在画自定义标签

private void setSliderLabels(){
字典表=新哈希表();
表1.put(-256,新JLabel(“-w/2”);
表1.put(-128,新JLabel(“-w/4”);
表1.put(0,新JLabel(“0”));
表1.put(128,新JLabel(“w/4”);
表2.put(256,新JLabel(“w/2”));
LSlider.可设置标签(表格);
QSlider.setLabelTable(表);
}

这通常意味着您违反了所使用API的(暗示或明示)合同。例如,用null值调用一个不应该用null调用的方法,或者不设置一些应该设置的字段。如果API在这方面不清楚,这通常是猜测。

你能发布再现这种情况的最小代码吗?你想解释什么?另外,发布整个stacktrace。它可能指向代码中某个地方的某一行。你的代码只是对SynthLabelUI崩溃负责,在它没有预料到或检查到的地方给它一个空值。Nathan,你说的听起来不错。我将发布整个stacktrace。我认为异常源于我的两个Jslider。这听起来与Nathan的评论一致。设置JLabel的大小修复了它。private void setSliderLabels(){Dictionary table=new Hashtable();JLabel JLabel=new JLabel(“-w/2”);JLabel.setSize(20,20);table.put(-256,jlabel);等等。