Search code examples
javaimageswingruntime-errorpng

swing doesn't show png icons on jbuttons




I have written a simple JFrame in java and added a button. Then I added a .png icon to the button but it keeps giving me an exception. (I don't have any problem with .jpg icons and it works well)

Here are my code and the exceptions.

public class Test
{
    static JFrame mainFrame;
    public static void main(String[] args)
    {
        mainFrame = new JFrame("a");
        mainFrame.setSize(300, 300);
        mainFrame.setLocation(50, 50);
        JButton btn = new JButton();
        ImageIcon icon = new ImageIcon("C:\\a.png");
        btn.setIcon(icon);
        btn.setSize(100, 100);
        btn.setLocation(50, 50);
        mainFrame.add(btn);
        mainFrame.setVisible(true);
    }
}

Exceptions :

sun.awt.image.PNGImageDecoder$PNGException: Broken file
    at sun.awt.image.PNGImageDecoder.pngassert(PNGImageDecoder.java:94)
    at sun.awt.image.PNGImageDecoder.handleChunk(PNGImageDecoder.java:107)
    at sun.awt.image.PNGImageDecoder.getData(PNGImageDecoder.java:726)
    at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:252)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
sun.awt.image.PNGImageDecoder$PNGException: Broken file
    at sun.awt.image.PNGImageDecoder.pngassert(PNGImageDecoder.java:94)
    at sun.awt.image.PNGImageDecoder.handleChunk(PNGImageDecoder.java:107)
    at sun.awt.image.PNGImageDecoder.getData(PNGImageDecoder.java:726)
    at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:252)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)

Solution

  • Code is fine, there's problem with your image file