Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我无法显示我出生时不存在的图像;“清洁和建筑”;netbeans中的项目_Java_Image_Swing_Netbeans - Fatal编程技术网

Java I';我无法显示我出生时不存在的图像;“清洁和建筑”;netbeans中的项目

Java I';我无法显示我出生时不存在的图像;“清洁和建筑”;netbeans中的项目,java,image,swing,netbeans,Java,Image,Swing,Netbeans,我的问题的背景 我正在使用netbeans IDE 7.1.2平台上的java swings创建一个项目 然后我在linux m/c(cent os)中执行在windows m/c上创建的jar文件。 在我项目的一部分中,我需要在运行时显示一些图片 问题陈述 案例1) 现在发生的事情是,在运行时,我通过java代码执行cp(copy)命令,将这些图片从其他位置带到项目的src目录。 是的,我已经检查过这些图片被成功复制到src目录中。 之后,当我试图在标签中显示这些图像时,图片没有显示出来 所以

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

问题陈述

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

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

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

所以我所做的唯一改变是,在windows m/c上“清理和构建”我的项目时,我将图片包括在src目录中。 所以我不明白的是 为什么第一种情况下不显示图片

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

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


非常感谢各位提供的任何见解。

所以我想你们正在做类似的事情

label.setIcon(new ImageIcon("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
,事实上,您正在将标签设置为不可见…

我无法将我的答案内容粘贴到注释中。因此我添加了我自己的答案。请注意。感谢您的评论…现在我使用了--BufferedImage image=ImageIO.read(新文件(“/home/aman/Desktop/diya.jpg”);jLabel1.setIcon(newimageicon(image));它工作正常。
BufferedImage image = ImageIO.read(new File("/home/aman/Desktop/diya.jpg"));
jLabel1.setIcon(new ImageIcon(image));