Java程序在eclipse中运行,但在jar中出错

Java程序在eclipse中运行,但在jar中出错,java,eclipse,jar,nullpointerexception,embedded-resource,Java,Eclipse,Jar,Nullpointerexception,Embedded Resource,我正在用Java开发一个游戏,它在Eclipse中按预期运行,但当我将其导出为可执行jar时,当我尝试调用File类的listFiles()方法时,会出现空指针异常。代码如下: File Buffer = new File( "Resources/SpriteSheets" ); // Count how many sprite sheets there are m_intTotalSheetCount = Buffer.listFiles( ).length; 以下是错误: C:\User

我正在用Java开发一个游戏,它在Eclipse中按预期运行,但当我将其导出为可执行jar时,当我尝试调用File类的listFiles()方法时,会出现空指针异常。代码如下:

File Buffer = new File( "Resources/SpriteSheets" );

// Count how many sprite sheets there are
m_intTotalSheetCount = Buffer.listFiles( ).length;
以下是错误:

C:\Users\Joe>java -jar C:\Users\Joe\Documents\GameDevelopment\Game1.jar
Exception in thread "Thread-2" java.lang.NullPointerException
        at Graphics.CSpriteSheetLoader.<init>(CSpriteSheetLoader.java:25)
        at Graphics.CScreen.<init>(CScreen.java:36)
        at game.CGame.Initialize(CGame.java:107)
        at game.CGame.run(CGame.java:157)
        at java.lang.Thread.run(Thread.java:722)
C:\Users\Joe>java-jar C:\Users\Joe\Documents\GameDevelopment\Game1.jar
线程“thread-2”java.lang.NullPointerException中的异常
位于Graphics.CSpriteSheetLoader.(CSpriteSheetLoader.java:25)
在Graphics.CScreen.(CScreen.java:36)
初始化(CGame.java:107)
在game.CGame.run(CGame.java:157)
运行(Thread.java:722)

我查看了jar文件,但那里甚至没有资源文件夹,所以我也尝试了file(“SpriteSheets”),但我遇到了相同的错误,即您试图访问一个不在jar文件中的文件。如果您在jar中包含resources文件夹。换句话说,把它放在它应该工作的同一个目录中

如果jar在桌面上,那么资源文件也必须在桌面上

  • 如果Jar文件中的
    “Resources/SpriteSheets”
    目录

    这个.getClass().getClassLoader().getResource()

    ClassLoader.getSystemResource

  • 如果
    “Resources/SpriteSheets”
    目录位于jar文件之外

    System.getProperty(“user.dir”)

  • 要获取根目录(可执行jar目录),您可以执行您想要的操作


    PS:您应该检查Buffer.listFiles()==null

    给我们一个
    C:\Users\Joe\Resources\SpriteSheets的列表
    我想您是想从jar文件中加载文件:我的Joe文件夹中没有名为Resources的文件夹。你是说C:\Users\Joe\Documents\GameDevelopment\Game1.jar吗?或者您是指eclipse项目的目录吗?到部署时,这些资源很可能会变成一个目录。在这种情况下,必须通过
    URL
    而不是
    File
    访问资源。请参阅标签,以获取形成
    URL
    的方法。不,我正在尝试访问jar中的文件。有不同的语法吗?我确认了文件在那里:谢谢,我昨天意识到我不能在jar中创建包含资源的file类的实例,所以我只是将文件放在jar之外,这就成功了