【问题标题】:Java application works fine from netbeans but not the command line or a .jar fileJava 应用程序在 netbeans 中运行良好,但在命令行或 .jar 文件中运行良好
【发布时间】:2012-01-18 20:34:30
【问题描述】:

我使用 netbeans 创建了一个应用程序,当我从 netbeans 运行它时效果很好, 但是当我尝试从命令行或从可执行的 .jar 文件运行它时,它就不起作用了!这个错误在我看来:

Dec 12, 2011 11:36:33 PM game.Threads.Intro_main <init>
SEVERE: null
javax.imageio.IIOException: Can't read input file!
        at javax.imageio.ImageIO.read(Unknown Source)
        at game.Threads.Intro_main.<init>(Intro_main.java:58)
        at game.Intro.<init>(Intro.java:28)
        at game.Start.<init>(Start.java:25)
        at game.Start.main(Start.java:35)

Exception in thread "main" java.lang.NullPointerException
        at sun.awt.CustomCursor.<init>(Unknown Source)
        at sun.awt.windows.WCustomCursor.<init>(Unknown Source)
        at sun.awt.windows.WToolkit.createCustomCursor(Unknown Source)
        at game.Threads.Intro_main.<init>(Intro_main.java:69)
        at game.Intro.<init>(Intro.java:28)
        at game.Start.<init>(Start.java:25)
        at game.Start.main(Start.java:35)

我认为问题在于命令行& .jar 不能确定我在应用程序中加载的图像的真实路径,所以我不知道避免这个问题的正确方法。

我知道这里有很多关于这个问题的问题,但我不知道真正的解决方案,我尝试了很多答案,但都没有奏效!

感谢您的合作:)

【问题讨论】:

  • 如何加载图像?它们在罐子里的什么位置?
  • 你能告诉我们 Intro_main.java 中的第 58 行吗? (或者,更好的是,向我们展示 Intro_main.java。)
  • @RogerLindsjö 我使用 BufferedImage imageIO.read(filepath); jar 文件位于 /dist 项目中
  • @JackEdmonds intro_bg = ImageIO.read(new File(assets/Graphics/intro_bg.png)); intro_roz = ImageIO.read(新文件(assets/Graphics/intro_roz.png)); intro_cursor = ImageIO.read(新文件(assets/Graphics/intro_cursor.png)); intro_cloud = ImageIO.read(new File(assets/Graphics/intro_cloud.png));

标签: java swing netbeans command-line jar


【解决方案1】:

避免这种情况的最佳方法是将要使用的图像打包到 .jar 文件中。然后使用类加载器加载图像。

javax.imageio.ImageIO.read(getClass().getResourceAsStream("myImage.png"));

【讨论】:

  • 我这样做了,我也看到了这个错误! :线程“主”java.lang.IllegalArgumentException 中的异常:输入 == null!在 javax.imageio.ImageIO.read(Unknown Source) 在 game.Threads.Intro_main.(Intro_main.java:58) 在 game.Intro.(Intro.java:28) 在 game.Start.(Start.java:25) at game.Start.main(Start.java:35)
  • @Jason4Ever 您确定将myImage.png 放入.jar 文件中吗?尝试解压(jar 文件实际上是变相的 .zip 文件。只需将扩展名从 .jar 更改为 .zip)并确保可以找到 myImage.png
  • hii 我发现了问题,问题是 jar 文件中的类不会从 .jar 文件中的图像文件夹中加载图像,但是当我将图像文件夹复制到 .jar 之外时文件,并将其与.jar文件放在一起,jar文件工作正常,因为它从.jar文件中加载了文件夹中的图像,所以我如何让类从.jar文件中的图像文件夹中加载图像??
  • 试试javax.imageio.ImageIO.read(getClass().getResourceAsStream("images/myImage.png"));
  • 谢谢你 :),我使用了这个方法,但它也不起作用! ,但我通过在完整路径的第一个添加 / 来解决它: javax.imageio.ImageIO.read(getClass().getResourceAsStream("/images/myImage.png")‌​);它现在工作得很好:) :)
【解决方案2】:

要解决这个问题,只需通过winrar归档程序将jar文件解压到一个文件夹中即可。然后看看结果..你的外部文件不会在那里..所以你必须把你的外部文件和你的jar文件放在同一个文件夹中。 NullPointerException 问题是没有正确初始化您的 jar 文件。您必须设置具有 main 方法的 Main 类。

【讨论】:

  • hii 我发现了问题,问题是 jar 文件中的类不会从 .jar 文件中的图像文件夹中加载图像,但是当我将图像文件夹复制到 .jar 之外时文件,并将其与.jar文件放在一起,jar文件工作正常,因为它从.jar文件中加载了文件夹中的图像,所以我如何让类从.jar文件中的图像文件夹中加载图像??
【解决方案3】:

如果您使用只读图像,您可以将它们留在 jar 中并使用 URL getClass().getResource() 或 InputStream getClass().getResourceAsStream()。否则,您可以将工作目录的路径与 System.getProperty("user.dir") 一起使用。

主目录 System.getProperty("home.dir") 也经常被使用:例如用于 NetbeansIDE 的“/NetbeansProjects”。

【讨论】:

  • 你答案的第一句话很好,但我看不出后面的句子对于获得application resources的路径的意义。
  • 我不知道您的“资源”是否是 Java 意义上的资源;取自类路径。看起来您可能正在使用文件。 感谢您的评论。
  • 你把我误认为是OP了吗?
  • @Andrew Thompson。对不起,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2017-11-16
  • 2019-05-01
  • 1970-01-01
相关资源
最近更新 更多