Java Swing:包含图像时,Runnable JAR文件不起作用

时间:2014-04-02 05:06:02

标签: java eclipse swing jar embedded-resource

下面的代码在Eclipse中运行良好(两种图像处理可能性)。但是当导出为Runnable JAR文件并双击.JAR时,没有任何反应。如果我注释掉代码的图像部分,则.JAR可以作为导出运行并且框架构建。所以看起来图像的获取导致.JAR失败。

我已经找到了位于C:\ Users \ sean \ workspace \ myApps \ bin \ testing'中的strawberry.jpg文件。你能告诉我这个问题是否与我的代码有关吗?

(此处首次修改代码:Java Swing: unable to load image using getResource

package testing;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;



public class IconTest {


public static void main(String[] arguments) throws IOException {

    JFrame frame1 = new JFrame();
    frame1.setTitle("Frame1");
    frame1.setSize(500, 500);
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    FlowLayout flo = new FlowLayout();
    frame1.setLayout(flo);

    //POSSIBILITY 1 TO HANDLE IMAGE
      InputStream resourceAsStream = IconTest.class.getResourceAsStream("strawberry.jpg");
    Image image = ImageIO.read(resourceAsStream);
    JLabel label1 = new JLabel(new ImageIcon(image));

    //POSSIBILITY 2 TO HANDLE IMAGE
/*    java.net.URL url= IconTest.class.getResource("strawberry.jpg");
    BufferedImage watermarkImage = ImageIO.read(url);
    JLabel label1 = new JLabel(new ImageIcon(watermarkImage));*/


    frame1.add(label1);
    frame1.setVisible(true);
}

}

5 个答案:

答案 0 :(得分:0)

处理图像的可能性3:

您可以检查您提取的资源是否存在。找不到资源,然后您可以使用替代文本创建JLabel ...

JLabel label1 ;
URL imageUrl = IconTest.class.getClassLoader().getResource("strawberry.jpg");
if ( imageUrl != null ) {
    label1 = new JLabel(new ImageIcon(imageUrl));
} else {
    label1 = new JLabel("Alternative text");
}

答案 1 :(得分:0)

将图像放在具有源文件的位置,因为它指向源目录

InputStream resourceAsStream = IconTest.class.getResourceAsStream("strawberry.jpg");

然后生成可运行的jar文件,然后右键单击jar并以java平台二进制文件运行

答案 2 :(得分:0)

关注Maven standard directory layout可能会有所帮助:

layout

答案 3 :(得分:0)

InputStream resourceAsStream = IconTest.class.getResourceAsStream("/strawberry.jpg")

它应该从“/”开始。还要检查jar是否真的有图像。只需打开包装并检查图像是否实际添加。

答案 4 :(得分:0)

此处提供的解决问题的指导帮助很大 - 谢谢大家。我测试了导出的JAR的内容;我使用Kishan建议的诊断代码来确定我的代码是否可以“看到”图像。我相信如果我在文件系统中移动图像而不是Eclipse导入功能,它可能与Eclipse工作/刷新的方式有关。 最后,为了使其工作,我做了以下更改: 我创建了一个新项目和两个子包 - 一个用于'资源',一个用于我的代码类。然后我右键单击>导入Eclipse中的资源包以获取图像。

我的代码中唯一要改变的是.... getResourceAsStream(“/ resources / strawberry.jpg”);