Java Swing: Displaying images from within a Jar

后端 未结 5 1197
野趣味
野趣味 2020-11-22 15:13

When running a Java app from eclipse my ImageIcon shows up just fine.

But after creating a jar the path to the image obviously gets screwed up.

Is there a wa

相关标签:
5条回答
  • 2020-11-22 15:56

    You can try something like:

    InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
    

    In your JAR file, you might have a directory structure of:

    MyJAR.jar
    - com (class files in here)
    - images
    ----image.jpg

    0 讨论(0)
  • 2020-11-22 16:03

    Load image in from Jar file during run time is the same as loading image when executed from IDE e.g netbeans the difference is that when loading image from JAR file the path must be correct and its case sensitive (very important). This works for me

     image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
            img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
            lblhabitat1.setIcon(new ImageIcon(img));
    

    if p in "/Pictures/firstgame/habitat1.jpg" is in lower case it wont work. check spaces, cases and spelling

    0 讨论(0)
  • 2020-11-22 16:04

    To create an ImageIcon from an image file within the same jars your code is loaded:

    new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))
    

    Class.getResource returns a URL of a resource (or null!). ImageIcon has a constructors that load from a URL.

    To construct a URL for a resource in a jar not on your "classpath", see the documentation for java.net.JarURLConnection.

    0 讨论(0)
  • 2020-11-22 16:07

    In netbeans 8.1 what I've done is to include the folder of icons and other images called Resources inside the src folder in the project file. So whenever i build Jar file the folder is included there.The file tree should be like this:

    • src (Java files in source packges are here)
    • ** PACKAGE YOU NAMED IN PROJECT**

      • file.java
    • Resources

      • image.jpg

    The code should be like:

    jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
    
    0 讨论(0)
  • 2020-11-22 16:11

    This is working for me to load and set the content pane background image:

    jar (or build path) contains:

     - com
     - img
     ---- bg.png
    

    java contains:

    JFrame f = new JFrame("Testing load resource from jar");
    try {
        BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
        f.setContentPane(new ImagePanel(bg));
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    Tested and working in both jar and unjarred (is that the technical term) execution.

    BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") - which I tried first - returned me a null InputStream.

    0 讨论(0)
提交回复
热议问题