【问题标题】:IllegalArgumentException : image must be non-nullIllegalArgumentException : 图像必须为非空
【发布时间】:2019-10-04 23:20:15
【问题描述】:

我正在使用 JavaFx 开发一个简单的“Space Invaders”游戏,当我在 netbeans 中运行项目时,我的游戏运行良好,没有任何异常或错误,但当我运行 .jar 文件时,它一直给我这个错误通过CMD,我似乎无法找到解决方案。

//这是我如何定义图像/图像模式的示例

Image il=new Image("file:ship.png");
setFill(new ImagePattern(il));

//这是错误

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Image must be non-null
        at com.sun.prism.paint.ImagePattern.<init>(ImagePattern.java:44)
        at com.sun.javafx.tk.quantum.QuantumToolkit.createImagePatternPaint(QuantumToolkit.java:905)
        at com.sun.javafx.tk.Toolkit.getPaint(Toolkit.java:657)
        at javafx.scene.paint.ImagePattern.acc_getPlatformPaint(ImagePattern.java:291)
        at javafx.scene.paint.Paint$1.getPlatformPaint(Paint.java:51)
        at javafx.scene.shape.Shape.updatePGShape(Shape.java:916)
        at javafx.scene.shape.Shape.impl_updatePeer(Shape.java:965)
        at javafx.scene.shape.Rectangle.impl_updatePeer(Rectangle.java:541)
        at javafx.scene.Node.impl_syncPeer(Node.java:503)
        at javafx.scene.Scene$ScenePulseListener.syncAll(Scene.java:2304)
        at javafx.scene.Scene$ScenePulseListener.syncAll(Scene.java:2313)
        at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2280)
        at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2419)
        at com.sun.javafx.tk.Toolkit.lambda$runPulse$29(Toolkit.java:398)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:397)
        at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:424)
        at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518)
        at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
        at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
        at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$408(QuantumToolkit.java:319)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
        at java.lang.Thread.run(Unknown Source)

编辑: 经过一些调试后,我发现 .jar 在 C:\Users\Admin 中而不是在项目本身中查找图像,我该如何更改?

【问题讨论】:

  • 你试过没有new Image("ship.png"); 部分的file: 吗!?
  • 确保您的图像包含在 jar 中
  • 我确实尝试了 new Image("ship.png") 并且我的图像包含在 jar 中。

标签: java javafx netbeans-8


【解决方案1】:

我认为图像应该与您的 java 项目位于同一目录中,或者在您的项目中声明一个图标包。 例如:/icons/monimage.png 在源目录中 否则你的访问路径会收紧

Image il=new Image("/icon/monimage.png");
setFill(new ImagePattern(il));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多