有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

运行jar文件时发生java FileNotFoundException

我有以下代码:

package test;


import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SWTTest {

    public static void main(String[] args) {
        SWTTest test=new SWTTest(new Display());
        test.run();
    }


    private Shell shell;
    private Display display;


    public SWTTest(Display main_display) {
        display=main_display;

        shell=new Shell(display, SWT.DIALOG_TRIM);
        shell.setText("Test window");
        shell.setBackgroundImage(new Image(display,"./image/blue_screen.jpg"));
    }

    public void run() {

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) 
                display.sleep();
        }
    }
}

这是编译和运行。问题是当我将其导出为jar文件时
只是为了确保我做得正确:
右键单击项目->;出口-&燃气轮机;可运行Jar文件->;选择正确的启动配置,然后选择“完成”
它创建了一个jar文件,但当我从终端运行它时,我得到:

Exception in thread "main" org.eclipse.swt.SWTException: i/o error (java.io.FileNotFoundException: ./image/blue_screen.jpg (No such file or directory))
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.graphics.ImageLoader.load(Unknown Source)
    at org.eclipse.swt.graphics.ImageDataLoader.load(Unknown Source)
    at org.eclipse.swt.graphics.ImageData.<init>(Unknown Source)
    at org.eclipse.swt.graphics.Image.<init>(Unknown Source)
    at test.SWTTest.<init>(SWTTest.java:31)
    at test.SWTTest.main(SWTTest.java:13)
Caused by: java.io.FileNotFoundException: ./image/blue_screen.jpg (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at org.eclipse.swt.internal.Compatibility.newFileInputStream(Unknown Source)
    ... 6 more

为什么它在Eclipse上运行,而不是作为jar文件运行
为什么突然找不到图像

(我还将提到,我在我的项目中添加了新的源文件夹,并将其命名为“image”,它现在位于“src”文件夹旁边——我想说的是,“image”文件夹是我的Eclipse项目中的源文件夹)
那么我在这里错过了什么


共 (1) 个答案

  1. # 1 楼答案

    当图像存储在jar中时,需要将其作为资源加载。沿着这些路线,但是你应该关闭小溪

    BufferedImage image = ImageIO.read(MyClass.class.getResourceAsStream("something.png"));
    

    当您在Eclipse中运行时,您的目录中有本地的图像,因此您可以通过普通的文件对象看到它们,但当它们在jar中时就看不到了