How to catch sun.awt.image.PNGImageDecoder$PNGException?

前端 未结 3 620
别那么骄傲
别那么骄傲 2021-01-25 00:04

How to catch the following exception that is printed to the error console when trying to load a corrupted PNG file:

sun.awt.image.PNGImageDecoder$PNGException: i         


        
相关标签:
3条回答
  • 2021-01-25 00:39

    This Exception is thrown from a separate thread, not the main thread. Actually your application execution completes successfully.

    0 讨论(0)
  • 2021-01-25 00:42

    As @MikeNakis said, a new Thread is spawned. In fact, ImageIcon delegates the image loading to a MediaTracker which has a spawned Thread and exposes methods to ImageIcon to get image status

    Try using getImageLoadStatus() which returns the underlying status of the image in the MediaTracker

    You can not get rid of the exception, as exceptions are catched by the `MediaTracker̀ and sent to sytem err. By the way, there is probably a mean to redirect system err elsewhere and keep your app console clean

    0 讨论(0)
  • 2021-01-25 00:49

    I'm not familiar with ImageIcon but you could simply first try to create an image from your source (your byte[] array) and then, if everything goes fine, create the ImageIcon.

    Like this:

        ByteArrayInputStream bas = new ByteArrayInputStream( new byte[] { -119, 80, 78, 71, 13, 10, 26, 10, 0, } );
        Image img = null;
        try {
            img = ImageIO.read( bas );
        } catch (IOException e) {
            ... // You'll catch that one should it happen...
        }
    

    and then if everything goes fine your create the ImageIcon:

    ImageIcon ii = new ImageIcon( img );
    
    0 讨论(0)
提交回复
热议问题