我无法显示那些当我在"清洁和建造时不存在的图像。 netbeans中的项目

时间:2014-06-05 21:22:53

标签: java image swing netbeans

我的问题的背景 我正在使用netbeans IDE 7.1.2平台上的java swings创建一个Project windows m / c。然后我在linux m / c(cent os)中执行在windows m / c上创建的jar文件。 在我的项目的一部分,我需要在运行时显示一些图片。

问题陈述

案例1) 现在发生的事情是,在运行时我通过java代码执行cp(copy)命令将这些图片从其他位置带到我项目的src目录。 是的,我已经检查过这些图片是否已成功复制到src目录中。 之后,当我试图在标签中显示这些图像时,图片没有显示。

所以我想知道为什么会这样。

案例2) 在这个问题之后,我做了一个更改,然后我在项目的src文件夹中导入了这些图片,然后才清理和构建了#34; windows m / c上的项目,而不是在linux m / c上运行时将它们带到运行时间。之后,当我在linux m / c上执行jar文件时,图片显示在标签中。

因此,只有改变我做的是我在"清洁和建立"期间将图片包含在src目录中。我在windows m / c上的项目。 所以我不明白的是 为什么第一种情况下没有显示图片。

我的问题和疑惑 1)在文件和图片等资源(在项目中使用,而不是在这里讨论项目的源代码)的上下文中,创建jar文件时究竟发生了什么?在构建项目时,这些资源(文件和图片)是否也包含在jar中?

2)为什么我会遇到这样的问题?(我还检查了这些图像文件的权限。他们在两种情况下完全相同。)

任何人都能提供的任何见解都将深受赞赏。

1 个答案:

答案 0 :(得分:1)

所以我假设你做了一些像

这样的事情
label.setIcon(new ImageIcon("src/path/to/image"));

BufferdImage img = ImageIO.read(new File("src/path/to/image"));

或更糟,使用绝对文件引用...

Netbeans会在构建项目时将src目录的内容添加到生成的jar文件中(不包括源文件;)),这会改变这些资源需要处理的方式,你不能再对待了它们就像它们是文件系统上的文件一样。

一旦嵌入到您的应用程序上下文中(例如包含在您的jar文件中),它们就会变成通常所说的嵌入式资源。

相反,您需要根据需要使用Class#getResource或Class#getResourceAsStream,例如......

label.setIcon(new ImageIcon(getClass().getResource("path/to/image")));

更多详情后更新

Image im=newImageIcon(this.getClass().getResource("/home/aman/Desktop/diya.jpg")).getImage();

他的文件类型是错误的方法。这个文件是文件系统上的一个文件,而不是你应该使用更像......

的东西
BufferedImage image = ImageIO.read(new File("/home/aman/Desktop/diya.jpg"));
jLabel1.setIcon(new ImageIcon(image));

注意,ImageIO.read会抛出一个IOException,它会被捕获,这对于诊断丢失的文件或错误的图像格式很有用

除非您之前更改了标签的可见性状态,否则无需拨打setVisible,事实上,您无论如何都要设置标签隐藏......