Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 添加JFrame后台导致.JAR被破坏_Java_Jframe - Fatal编程技术网

Java 添加JFrame后台导致.JAR被破坏

Java 添加JFrame后台导致.JAR被破坏,java,jframe,Java,Jframe,我想知道我的代码中导致.JAR文件被破坏的问题是什么?当我双击jar文件时,它并没有打开,但在将背景图像添加到JFrame之前它还可以 我创建了一个名为Cube的类来绘制Cube,我想将背景图像设置为JFrame,所以我在Cube类中添加了字段 private BufferedImage bg; 类构造函数中的bg初始化 publice Cube() { bg = ImageIO.read(new File("bg_image.jpg")); } 这段代码用于设置背景 @Override p

我想知道我的代码中导致.JAR文件被破坏的问题是什么?当我双击jar文件时,它并没有打开,但在将背景图像添加到JFrame之前它还可以

我创建了一个名为Cube的类来绘制Cube,我想将背景图像设置为JFrame,所以我在Cube类中添加了字段

private BufferedImage bg;
类构造函数中的bg初始化

publice Cube() {
bg = ImageIO.read(new File("bg_image.jpg"));
}
这段代码用于设置背景

@Override
public void paintComponent(Graphics g) {

    super.paintComponent(g);
    g.drawImage(bg, 0, 0, this);
}
在main类中,我创建了JFrame对象来绘制立方体

    JFrame jf = new JFrame();
    jf.add(new Cube());
    jf.setEnabled(true);
    jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    jf.setResizable(false);
    jf.setSize( 500, 500 );
    jf.setVisible( true );

因为我没有你的jar文件,所以我没有办法知道这个问题。您需要将该文件作为资源而不是新文件进行访问,因为它位于jar中。首先,您应该使用cmd运行jar,看看它是否提供堆栈跟踪。使用命令:
java-jarfilename.jar
通过命令提示符运行jar

尝试使用:

Cube.class.getResourceAsStream("bg_image.jpg");
bg=ImageIO.read(新文件(“bg_image.jpg”)

这段代码说明
bg_image.jpg
应该靠近.jar

您可以将图像放入资源并按如下方式加载:

Cube.class.getClassLoader().getResourceAsStream("bg_image.jpg");

ps:在构造函数中加载资源是个坏主意

问题可能在于打开图像。编译项目时,映像在本地加载(在项目文件夹中),但当导出到.jar时,映像可能与jar不在同一文件夹中,因此它会引发异常,因为找不到映像。由于您没有异常控制,异常将杀死应用程序。
当我双击jar文件时,它不会打开
从命令行运行jar,这样你就可以看到可能引发的任何异常-最有可能发生在加载该图像时。感谢mush在将图像添加到jar文件的同一文件夹后,它现在真的可以工作了添加图片在jar文件的同一文件夹中,谢谢