Java Jar资源访问中的IllegalArgumentException

Java Jar资源访问中的IllegalArgumentException,java,netbeans,jar,resources,Java,Netbeans,Jar,Resources,我花了整个晚上(直到凌晨3点)和今天早上研究、测试、重构,并试图调试这个问题。我在Netbeans中有一个简单的Java游戏,虽然它在IDE中以运行或调试模式完美运行,但一旦导出到jar文件中,它就拒绝正确加载任何资源。有许多类似的问题,例如,尽管付出了巨大的努力,但这些解决方案都不适用于我的项目。我不使用图像图标,只使用简单的缓冲图像和wav声音文件。我最近进行了重构,将我的BufferedImageLoader和Sound类合并到一个资源类中,然后将其与我的所有资源移到同一个包中,尽管它在I

我花了整个晚上(直到凌晨3点)和今天早上研究、测试、重构,并试图调试这个问题。我在Netbeans中有一个简单的Java游戏,虽然它在IDE中以运行或调试模式完美运行,但一旦导出到
jar
文件中,它就拒绝正确加载任何资源。有许多类似的问题,例如,尽管付出了巨大的努力,但这些解决方案都不适用于我的项目。我不使用图像图标,只使用简单的缓冲图像和
wav
声音文件。我最近进行了重构,将我的BufferedImageLoader和Sound类合并到一个资源类中,然后将其与我的所有资源移到同一个包中,尽管它在IDE中之前在单独的代码包中工作得非常好,尽管它也在其新位置工作,严格地说是在IDE中

我对这个问题感到相当恼火和慌乱。真正令人恼火的是,这个项目在被导出到
jar
之后,曾经使用过资源,现在它似乎已经停止工作,没有任何更改。在编程上,它工作的时候和现在唯一的区别是,我当时没有或没有使用声音文件,但这个错误与声音文件无关,因为它捕获了一个异常(并生成了一个错误对话框),只是从第一次尝试加载艺术资产开始

我已经尝试了我在研究中发现的所有可能的解决方案,但都无济于事。希望一双新的眼睛能揭示我的错误

有问题的代码行是

return ImageIO.read(Resource.class.getResource("/res/" + imageFileName));
而imageFileName是具有从方法调用传递的值的参数,例如

blockSheet = Resource.loadImage("art_assets/platform.png");
资源类的位置似乎与Netbeans中的工作无关。我的
res
文件夹位于
src
内,紧挨着
com
类包开头

它抛出一个
IllegalArgumentException:input==null异常。经过一些测试,似乎
Resource.class.getResource(“/res/”+imageFileName)
返回一个空值,这毫无意义。同样,这在IDE中工作得非常完美。我可以将
jar
文件更改为
zip
,并查看内部,以确保所有资源都具有正确的名称和正确的扩展名

非常感谢您的帮助。多谢各位

编辑:

我已经尝试过的一些事情:

getResourceAsStream()
而不是
getResource()

classLoader()
Resource.class
getResource()之间

this.getClass()
而不是非静态上下文中的
Resource.class
,我认为这应该有帮助:

由本尼·纽格鲍尔在邮报上提供

CodeSource codeSource = YourMainClass.class.getProtectionDomain().getCodeSource(); 
File jarFile = new File(codeSource.getLocation().toURI().getPath());
String jarDir = jarFile.getParentFile().getPath();