【问题标题】:Jar file will not run. Get's an error in cmdjar 文件不会运行。在cmd中获取错误
【发布时间】:2013-11-26 01:14:34
【问题描述】:

我无法让我的 jar 文件运行,所以我在 cmd 中执行了“java -Xmx1024m -jar test.jar”,但出现了很多错误。

我在路径中设置了图像资源和 jar 库。不过,它在 Eclipse 中运行良好。任何帮助都会很棒。谢谢。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at ImagePanel.<init>(FinalRevNoise.java:117)
        at FinalRevNoise.createAndShowGUI(FinalRevNoise.java:53)
        at FinalRevNoise.access$0(FinalRevNoise.java:48)
        at FinalRevNoise$1.run(FinalRevNoise.java:42)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

这里是我定义 spries 和床单的地方

BufferedImage bigImg; //sprite sheets
BufferedImage bigImg2;
BufferedImage bigImg3;

BufferedImage[] sprites; //individual sprites
BufferedImage[] sprites2;
BufferedImage[] sprites3; 

117 左右的代码

public ImagePanel(){
         try {

             bigImg = ImageIO.read(new File("res/sheet.png")); //sprite sheet paths
             bigImg2 = ImageIO.read(new File("res/sheet2.png"));
             bigImg3 = ImageIO.read(new File("res/sheet3.png"));


         } catch (IOException e) {
         }

         final int width = 20; //sprite width/height = 20 pixels
         final int height = 20;
         final int rows = 6; // 6 rows and 5 collums
         final int cols = 5;
         sprites = new BufferedImage[rows * cols]; //sets up the sprite arrays
         sprites2 = new BufferedImage[rows * cols];
         sprites3 = new BufferedImage[rows * cols];

         for (int i = 0; i < rows; i++) //goes through sprite sheet and puts sprites into an array
         {
             for (int j = 0; j < cols; j++)
             {
                 sprites[(i * cols) + j] = bigImg.getSubimage( //this is line 117
                     j * width,
                     i * height,
                     width,
                     height
                 );
             }
         }
}

【问题讨论】:

  • 您可以粘贴错误而不是屏幕转储,以便我们自己复制粘贴并帮助您吗?一些代码也会很有帮助——尤其是第 117 行附近的 FinalRevNoise.java。
  • @hexafraction 在第 117 行添加了代码。但不确定如何在 cmd 中复制。
  • @SolidCloudinc 右键单击​​,选择标记,选择您的文本,然后按 Enter。
  • @hichris123 谢谢,已更新
  • 好吧,你在第 117 行有一个空指针。假设列表是准确的,可能是“sprites”,也可能是“bigImg”。

标签: java eclipse jar compilation cmd


【解决方案1】:

第 117 行:

sprites[(i * cols) + j] = bigImg.getSubimage(

由于您在此处收到 NullPointerException,因此 sprites 为 null,或者 bigImg 为 null。 sprites 不能为空,因为您只是将其设置为新数组。因此 bigImg 为空。

为什么 bigImg 为空?因为

ImageIO.read(new File("res/sheet.png"))

抛出一个 IOException。

【讨论】:

  • 好的,为什么这不会在 IDE 上引发异常,但会在 .jar 上引发异常?我没有正确指向我的文件,还是我错过了需要做的额外步骤?
  • jar文件执行时当前目录下是否有包含图片的res文件夹?如果可以的话,最好把图片放到jar文件中,使用其中一种getResource方法来访问。
  • @NormR +1 我做到了,效果很好。我还必须将 spritesheet 所在的文件夹添加到我的属性中,然后是文件路径。谢谢。
  • 另外,这就是为什么捕获异常并且什么都不做是一个坏主意的原因。如果你至少打印了异常,你就会知道它被抛出了。
【解决方案2】:

您能否告诉我们 jar 文件与 res 文件夹的关系在哪里?

第 117 行的 NullPointerException 回到行

bigImg = ImageIO.read(new File("res/sheet.png")); 

很可能您的 jar 文件不在包含 srcres的项目文件夹中> 个文件夹。如果你把你的 jar 文件放在那里,bigImg 就不会为空。

【讨论】:

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