Java ActionEvent-更改按钮按下时的JLabel
我对Java还是个新手,在点击按钮后更改JLabel中的图像时遇到了麻烦。我没有得到任何编译器错误,但我得到了一个运行时错误Java ActionEvent-更改按钮按下时的JLabel,java,swing,nullpointerexception,awt,actionevent,Java,Swing,Nullpointerexception,Awt,Actionevent,我对Java还是个新手,在点击按钮后更改JLabel中的图像时遇到了麻烦。我没有得到任何编译器错误,但我得到了一个运行时错误 Line 107: l1.setIcon(icon); 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 } 完整错误消息: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at HomeController.act
Line 107: l1.setIcon(icon);
线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常
}
完整错误消息:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at HomeController.actionPerformed(HomeController.java:107)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
您的问题源于您在主控制器中声明了一个全局变量:
private JLabel l1;
另一个,本地,在构造函数中:
// Create Jlabels to hold blank image
JLabel l1 = new JLabel(blank);
在构造函数中,您使用与类中相同的名称定义了一个变量,但它是另一个变量。构造函数中的一个隐藏了类中的一个。
因此,最后,只有构造函数变量被初始化。如果在构造函数中这样更改代码
// Create Jlabels to hold blank image
l1 = new JLabel(blank);
然后,您的类中只有一个全局变量,并且不会得到NullPointerException。将整个堆栈跟踪(包括行号)复制/粘贴为。
Clock clock1=new Clock()
为了更快地获得更好的帮助,请发布一个。很可能clock1.getPicture()
返回null。所有此类java错误都带有堆栈跟踪。stacktrace告诉您具有空指针的代码行。如果你真的不能从那里弄明白,就把stacktrace贴出来。此外,在发布需要帮助的问题时,请发布发生错误的条件。节目什么时候开始?当按钮被点击时?只在交替的星期四?假设您的志愿助手从未见过您的程序或错误消息,并且希望获得足够的信息来帮助您。@BlackBox告诉我,在第107行“l1.setIcon(icon);”上返回了空指针?谢谢,总是简单的错误会让您大吃一惊。
// Create Jlabels to hold blank image
l1 = new JLabel(blank);