下面的代码在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);
}
}
答案 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可能会有所帮助:
答案 3 :(得分:0)
InputStream resourceAsStream = IconTest.class.getResourceAsStream("/strawberry.jpg")
它应该从“/”开始。还要检查jar是否真的有图像。只需打开包装并检查图像是否实际添加。
答案 4 :(得分:0)
此处提供的解决问题的指导帮助很大 - 谢谢大家。我测试了导出的JAR的内容;我使用Kishan建议的诊断代码来确定我的代码是否可以“看到”图像。我相信如果我在文件系统中移动图像而不是Eclipse导入功能,它可能与Eclipse工作/刷新的方式有关。 最后,为了使其工作,我做了以下更改: 我创建了一个新项目和两个子包 - 一个用于'资源',一个用于我的代码类。然后我右键单击>导入Eclipse中的资源包以获取图像。
我的代码中唯一要改变的是.... getResourceAsStream(“/ resources / strawberry.jpg”);