【问题标题】:caused by java.lang.runtimeexception exception in application start method由应用程序启动方法中的 java.lang.runtimeexception 异常引起
【发布时间】:2017-04-17 11:27:51
【问题描述】:

我一直使用 javaFX 而不需要 fxml 文件。当我在 IDE 中运行我的应用程序时,它运行良好。只有当我制作 jar 文件时它才不起作用。有什么帮助吗?

error : no such file in res\img\menu_bg.png 

此文件与整个代码位于同一文件夹中

代码

public class InputStreamClass {
    private ImageView imgViewBG;
    public InputStreamClass() throws Exception {
        InputStream isBG = Files.newInputStream(Paths.get("res/img/menu_bg.png")); // res/img/menu_bg.png
        Image imgBG = new Image(isBG);
        isBG.close(); // kedze je to InputStream a pracujeme zo suborom tak vzdy ho treba zatvarat 
        this.imgViewBG = new ImageView(imgBG); // pridame img do ImageView
        this.imgViewBG.setFitWidth(1600); // sirka obrasku
        this.imgViewBG.setFitHeight(900); // vyska obrasku
    }
     public ImageView getImageViewBG() {
        return this.imgViewBG;
     }
}

【问题讨论】:

  • A) 你的堆栈跟踪是文本。所以把它作为 text 引入,而不是像老年人几乎不可能阅读的屏幕截图那样。 B) 您是否确保您的 JAR 文件确实包含您要使用的资源?
  • 也许你没有包含你的 res 文件夹看这里link
  • @ghostCat 只需点击它就会弹出,你可以放大它:) 我包含的packgaes也只需要包含资源吗?它不会自动包含在 Package 中?
  • 很公平,但仍然:屏幕截图在这里被视为“最后的手段”。对于只能截屏的东西。您的控制台输出是 text!
  • 文件与代码是否在同一文件夹中无关紧要。重要的是是否可以从 工作目录 解析相对路径 res/img/menu_bg.png。此外,应该将一直使用的文件作为资源包含在内(假设您不必写入它。)

标签: java javafx


【解决方案1】:

我假设您不需要写入图像文件。

在这种情况下,图像最好包含在 jar 中。这可以防止路径问题。 Java 尝试解析相对于工作目录的相对路径,工作目录通常不是代码文件夹。

通过将图像添加到 jar 文件本身,您可以使用 Class 实例获取资源,例如

// InputStream isBG = getClass().getResourceAsStream("/res/img/menu_bg.png");
// Image imgBG = new Image(isBG);

Image imgBG = new Image(getClass().getResource("/res/img/menu_bg.png").toExternalForm());

独立于工作目录工作。

这假定文件在 jar 文件中存储为 /res/img/menu_bg.png 条目。

【讨论】:

    【解决方案2】:

    试试这个:在与你的 jar 相同的文件夹中,放置另一个文件夹名称 res。在 res 文件夹中创建一个名为 img 的文件夹。在 img 文件夹中,将您的实际图像放入上面的名称。

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 2018-05-29
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多