Note that there are some explanatory texts on larger screens.

plurals
  1. POIOException when opening JFileChooser
    text
    copied!<p>Ok this one is really weird. Every first time my application opens a JFileChooser it throws a IOException then some icons don't show properly.</p> <pre><code>java.io.IOException at sun.awt.image.GifImageDecoder.readHeader(GifImageDecoder.java:265) at sun.awt.image.GifImageDecoder.produceImage(GifImageDecoder.java:102) at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246) at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) </code></pre> <p>Now when I dig into the error, it seems like on one icon when it tries to read the header, it retrieve only the first 8 bytes which is not enough. I've have checked the icons files and they all seem OK. I've tried to override the icon file with another one that loads properly before this error but same thing.</p> <p>Here is my stack when breaking on this error :</p> <pre><code>Daemon Thread [Image Fetcher 0] (Suspended (exception IOException)) GifImageDecoder.readHeader() line: 265 [local variables unavailable] GifImageDecoder.produceImage() line: 102 [local variables unavailable] ByteArrayImageSource(InputStreamImageSource).doFetch() line: 246 ImageFetcher.fetchloop() line: 172 ImageFetcher.run() line: 136 [local variables unavailable] </code></pre> <p>Here is my variable value when digging into GifImageDecoder instance.</p> <pre><code>source ByteArrayImageSource (id=272) awaitingFetch false consumers null decoder GifImageDecoder (id=271) decoders GifImageDecoder (id=271) imagedata (id=307) [0] 71 [1] 73 [2] 70 [3] 56 [4] 57 [5] 97 [6] 16 [7] 13 [8] 10 imagelength 9 imageoffset 0 </code></pre> <p>Normally, this imagedata should be way bigger. First 10 bytes is header but it only retrieve 8 bytes as you can see. After this exception, every other icon from JFileChooser doesn't load properly.</p> <p>This is a proper call to readHeader() :</p> <pre><code>source ByteArrayImageSource (id=208) awaitingFetch false consumers null decoder GifImageDecoder (id=207) decoders GifImageDecoder (id=207) imagedata (id=223) [0...99] [100...199] [200...299] [300...399] [400...499] [500...599] [600...699] [700...799] [800...899] [900...979] imagelength 980 imageoffset 0 </code></pre> <p>The buffer is fully loaded with an icon right before the icon that throws an error.</p> <p>Here is an exemple of where it could crash (it happens in several part of my code, whenever I first load my system icons) :</p> <pre><code>public class DirectoryBrowser extends JFileChooser{ private String suffixAccepted = null; public DirectoryBrowser(File file, String chooserTitle, String approveOpenBtnText, String suffixAccepted) { super(file); this.suffixAccepted = suffixAccepted; init(chooserTitle, approveOpenBtnText); } </code></pre> <p>when it enters in super(file) it goes there :</p> <pre><code>Thread [AWT-EventQueue-0] (Suspended) Object.wait(long) line: not available [native method] MediaTracker.waitForID(int, long) line: 651 ImageIcon.loadImage(Image) line: 234 ImageIcon.&lt;init&gt;(byte[]) line: 215 SwingUtilities2$2.createValue(UIDefaults) line: 1105 UIDefaults.getFromHashtable(Object) line: 185 UIDefaults.get(Object) line: 130 MultiUIDefaults.get(Object) line: 44 MultiUIDefaults(UIDefaults).getIcon(Object) line: 411 UIManager.getIcon(Object) line: 613 IronFileChooserUI(BasicFileChooserUI).installIcons(JFileChooser) line: 233 IronFileChooserUI(BasicFileChooserUI).installDefaults(JFileChooser) line: 219 IronFileChooserUI(BasicFileChooserUI).installUI(JComponent) line: 135 IronFileChooserUI(MetalFileChooserUI).installUI(JComponent) line: 139 DirectoryBrowser(JComponent).setUI(ComponentUI) line: 653 DirectoryBrowser(JFileChooser).updateUI() line: 1757 DirectoryBrowser(JFileChooser).setup(FileSystemView) line: 366 DirectoryBrowser(JFileChooser).&lt;init&gt;(File, FileSystemView) line: 332 DirectoryBrowser(JFileChooser).&lt;init&gt;(File) line: 315 DirectoryBrowser.&lt;init&gt;(File, String, String, String) line: 33 PackToIntegratePanel.choosePackPathToIntegrateFile() line: 522 PackToIntegratePanel$1.actionPerformed(ActionEvent) line: 104 JButton(AbstractButton).fireActionPerformed(ActionEvent) line: 1849 AbstractButton$Handler.actionPerformed(ActionEvent) line: 2169 DefaultButtonModel.fireActionPerformed(ActionEvent) line: 420 DefaultButtonModel.setPressed(boolean) line: 258 BasicButtonListener.mouseReleased(MouseEvent) line: 236 JButton(Component).processMouseEvent(MouseEvent) line: 5517 JButton(JComponent).processMouseEvent(MouseEvent) line: 3135 JButton(Component).processEvent(AWTEvent) line: 5282 JButton(Container).processEvent(AWTEvent) line: 1966 JButton(Component).dispatchEventImpl(AWTEvent) line: 3984 JButton(Container).dispatchEventImpl(AWTEvent) line: 2024 JButton(Component).dispatchEvent(AWTEvent) line: 3819 LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4212 LightweightDispatcher.processMouseEvent(MouseEvent) line: 3892 LightweightDispatcher.dispatchEvent(AWTEvent) line: 3822 WorkbenchFrame(Container).dispatchEventImpl(AWTEvent) line: 2010 WorkbenchFrame(Window).dispatchEventImpl(AWTEvent) line: 1791 WorkbenchFrame(Component).dispatchEvent(AWTEvent) line: 3819 EventQueue.dispatchEvent(AWTEvent) line: 463 EventDispatchThread.pumpOneEventForHierarchy(int, Component) line: 242 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 163 EventDispatchThread.pumpEvents(int, Conditional) line: 157 EventDispatchThread.pumpEvents(Conditional) line: 149 EventDispatchThread.run() line: 110 </code></pre> <p>then other thread mentioned above retrieves the icons (cf 2nd stack of this post)</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload