运行 可执行 .jar 文件 Crashes/Error

Running Executable .jar file Crashes/Error

我是 java 开发的新手,我正在制作披萨管理系统,但是当我尝试 运行 我的可执行 .jar 文件时,第一页加载但当我点击一个选项时它崩溃并给我以下错误。它说找不到文件,但我通过文件输入流导入了项目文件夹中的文件,如下所示。同样,我是 java 程序创建方面的新手,有人可以告诉我如何解决这个问题吗?

public void CarryOrDeli() throws FileNotFoundException {
    Stage option = new Stage();
    GridPane gp = new GridPane();
    gp.setPadding(new Insets(0, 100, 0, 0));

    for (int i = 0; i < 6; i++) {
        gp.getColumnConstraints().add(new ColumnConstraints(165)); // column
                                                                    // is
                                                                    // wide
    }

    for (int i = 0; i < 7; i++) {
        gp.getRowConstraints().add(new RowConstraints(200)); // column 1 is
                                                                // // 50
                                                                // wide
    }
    // <------------------------------------------------------->
    // getting images from files.
    FileInputStream one = new FileInputStream("carryout.jpeg");
    FileInputStream two = new FileInputStream("delivery.jpeg");

    // converting to a viewable node image
    Image c = new Image(one);
    Image d = new Image(two);
    ImageView carryout = new ImageView(c);
    ImageView delivery = new ImageView(d);

    Text title = new Text("       Chose Carryout or Delivery");
    title.setFill(Color.BLUE);
    title.setStyle("-fx-font: 24 arial;");

    carryout.setFitWidth(100);
    carryout.setFitHeight(100);

    delivery.setFitWidth(100);
    delivery.setFitHeight(100);

    gp.add(carryout, 2, 1);
    gp.add(delivery, 4, 1);
    gp.add(title, 2, 0, 3, 1);

错误

java.io.FileNotFoundException: carryout.jpeg (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at main.MainScrn.CarryOrDeli(MainScrn.java:313)
at main.MainScrn.lambda[=13=](MainScrn.java:85)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access00(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access00(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent4(GlassViewEventHandler.java:416)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)

您需要将图像打包到 jar 存档中,您当前的补丁在源代码中工作,并且在编译和打包到 jar 时指向无处。

FileInputStream one = new FileInputStream("carryout.jpeg");
FileInputStream two = new FileInputStream("delivery.jpeg");

替换为

InputStream stream = this.getClass().getResourceAsStream("\carryout.jpg"); 
当您使用标准 java 项目文件夹布局时,

文件 carryout.jpg 必须与 class 文件 present.Place 在 resources 文件夹中的同一目录中。