An SO User
An SO User

Reputation: 24998

ImageIcon lost after creating a runnable JAR file

enter image description here

The project runs fine when I click play in Eclipse but after I created the runnable JAR file, The ImageIcon for the button is gone.
The images are stored within the src folder, uder a subfolder images.
I created the image icon as

  • Icon playIcon = (Icon) new ImageIcon("src/images/play.png");
  • Although I am using a relative path, the button does not display images, How do I get the images even in the JAR file?



    Update after Nikolay Kuznetsov's answer

    I ended up creating a very unstructured monolithic code for screen recorder and now it is slightly difficult to implement what he said.
    I was wondering if there is a way like creating a class or interface that will contain all these resources.

  • For example:
  • public class embeddedResources {
        public static Icon blackCursor;
        public static Icon whiteCursor;
        ...
        ...
    }  
    

    Then all I have to do is import these statics and in my main ScreenRecorder class,

    this.blackCursor = embeddedResources.blackCorsor;
    

    Upvotes: 0

    Views: 978

    Answers (2)

    Nikolay Kuznetsov
    Nikolay Kuznetsov

    Reputation: 9579

    I am using this method to read image into BufferedImage where IconManager is class where it is defined.

    private static BufferedImage readBufferedImage (String imagePath) {
        try {
            InputStream is = IconManager.class.getClassLoader().getResourceAsStream(imagePath);
            BufferedImage bimage = ImageIO.read(is);
            is.close();
            return bimage;
        } catch (Exception e) {
            return null;
        }
    }
    

    Upvotes: 3

    Alex VII
    Alex VII

    Reputation: 930

    I had the same problem. Try to make you JAR file and add your images to an extern folder. So you have a folder "Game" in this folder are the folder for your images called "images" or so and your jar file. If you now edit you folder path to "../images/play.png" it should work.

    Upvotes: 3

    Related Questions