【问题标题】:JavaFx Image not found in Jar file在 Jar 文件中找不到 JavaFx 图像
【发布时间】:2016-11-21 12:59:13
【问题描述】:

我正在尝试为我的项目生成一个可运行的 jar 文件,该文件具有 JavaFx gui。 该项目在 Eclipse 中运行得更好,但是当我尝试运行 jar 时:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   ...Caused by: java.lang.NullPointerException: Input stream must not be null

图片代码如下:

private Image image1 = new Image(this.getClass().getResourceAsStream("../pic/classic/image1.png"));

我需要更改什么,以便我可以毫无例外地运行我的 jar 文件。

感谢您的帮助。

【问题讨论】:

  • 不要在字符串中使用..。如果父包中有类,则将其用作资源的引用:SomeClassInParentPackage.class.getResourceAsStream("pic/classic/image1.png") 否则,只需使用根相对资源路径引用资源:"/com/example/app/pic/classic/image1.png"
  • "编辑:感谢您对第一个问题的帮助。另一个问题我怎么能..." 不,你得到了问题的答案。不要编辑您的问题以添加更多问题。出于这个原因,我回滚了那个编辑。您仍然可以在这里找到您的内容:stackoverflow.com/posts/38444852/revisions。请提出一个新问题。另外,如果答案对您有用,请考虑接受它。

标签: java image javafx


【解决方案1】:

.. 在 jar 文件中指定资源名称时无效。根据documentation on resource naming,资源路径的每个组件都应该是一个有效的Java 标识符:.. 不是。

要解决这个问题,只需指定相对于类路径的绝对资源名称。因此,如果您所在的课程位于名为 com.mycompany.myapplication.view 的包中,您将使用

private Image image1 = 
    new Image(this.getClass().getResourceAsStream("/com/mycompany/myapplication/pic/classic/image1.png"));

【讨论】:

    【解决方案2】:

    请记住,图像文件名在 jar 中是区分大小写的,而不是在 IDE 中(例如 Eclipse)。

    因此,如果您有 "/resource/image.jpg" 参数和 IMAGE.jpg 文件名,则应用程序将在 Eclipse 中运行,并且在导出到 jar 时将在

    中生成 NullPointerException
    Image image1 = new Image(getClass().getResourceAsStream("/resource/image.jpg"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-06
      • 2018-08-21
      • 1970-01-01
      • 2023-04-06
      • 2020-09-09
      • 2013-03-24
      • 2019-03-02
      • 1970-01-01
      相关资源
      最近更新 更多