-
Enhancement
-
Resolution: Unresolved
-
P4
-
8u91
-
x86
-
os_x
A DESCRIPTION OF THE REQUEST :
When trying to call 'icon.setImage(null);' where 'icon' is an instance of ImageIcon, a null pointer exception is thrown at runtime rather than clearing the ImageIcon.
JUSTIFICATION :
The online docs do not say anything about null parameters being disallowed (and certainly not that it results in an error), and moreover an otherwise functional ImageIcon may be constructed without initializing it to any particular image, so it would seem to make sense to allow passing null to return the ImageIcon to that blank state even after it has previously displayed an image.
If the current behaviour is actually desired, the docs should at least be clarified to say that a null parameter should not be used.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
setImage(null) would return an ImageIcon to a state mirroring that resulting from an empty constructor.
ACTUAL -
The following exception is thrown:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.loadImage(ImageIcon.java:321)
at javax.swing.ImageIcon.setImage(ImageIcon.java:381)
at src.gui.LoginFacePanel.setEnabled(LoginFacePanel.java:114)
at src.gui.PanelCard$CardDisplayAdapter.componentShown(PanelCard.java:34)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.Component.processComponentEvent(Component.java:6367)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
CUSTOMER SUBMITTED WORKAROUND :
Set any JLabels or other components using the ImageIcon to have a null icon (e.g., imageLabel.setIcon(null);') rather than changing the ImageIcon itself, and then set them back to the same icon after the new image has been loaded.
When trying to call 'icon.setImage(null);' where 'icon' is an instance of ImageIcon, a null pointer exception is thrown at runtime rather than clearing the ImageIcon.
JUSTIFICATION :
The online docs do not say anything about null parameters being disallowed (and certainly not that it results in an error), and moreover an otherwise functional ImageIcon may be constructed without initializing it to any particular image, so it would seem to make sense to allow passing null to return the ImageIcon to that blank state even after it has previously displayed an image.
If the current behaviour is actually desired, the docs should at least be clarified to say that a null parameter should not be used.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
setImage(null) would return an ImageIcon to a state mirroring that resulting from an empty constructor.
ACTUAL -
The following exception is thrown:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.loadImage(ImageIcon.java:321)
at javax.swing.ImageIcon.setImage(ImageIcon.java:381)
at src.gui.LoginFacePanel.setEnabled(LoginFacePanel.java:114)
at src.gui.PanelCard$CardDisplayAdapter.componentShown(PanelCard.java:34)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.AWTEventMulticaster.componentShown(AWTEventMulticaster.java:179)
at java.awt.Component.processComponentEvent(Component.java:6367)
at java.awt.Component.processEvent(Component.java:6315)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
CUSTOMER SUBMITTED WORKAROUND :
Set any JLabels or other components using the ImageIcon to have a null icon (e.g., imageLabel.setIcon(null);') rather than changing the ImageIcon itself, and then set them back to the same icon after the new image has been loaded.