Java getClass()上的getResource(";)在处理JDK 8的JDK 11中返回null

Java getClass()上的getResource(";)在处理JDK 8的JDK 11中返回null,java,java-8,java-11,Java,Java 8,Java 11,我正在尝试将一个库从JDK 8更新为JDK 11;有一个对getClass()的访问权限。getResource(“”转换为URI后将生成路径。现在,在从Java8更新到11之后,它总是返回null。JDK上是否有任何可能导致这种情况的变化 uriresource=Objects.requirennull(getClass().getResource(“”,“resource”).toURI(); getResource(“”)从未保证能正常工作,在较旧的Java版本中也可能失败,例如,当类位于

我正在尝试将一个库从JDK 8更新为JDK 11;有一个对
getClass()的访问权限。getResource(“”
转换为URI后将生成路径。现在,在从Java8更新到11之后,它总是返回null。JDK上是否有任何可能导致这种情况的变化

uriresource=Objects.requirennull(getClass().getResource(“”,“resource”).toURI();

getResource(“”)
从未保证能正常工作,在较旧的Java版本中也可能失败,例如,当类位于jar文件中时。您还应该记住,
getClass().getResource(…)
可能会在一个完全不同的位置进行搜索,如果
是当前类的子类型。“通常,这不是有意的。”霍尔格,谢谢你的回答;我想获取运行中的jar文件uri,以便稍后处理;你能告诉我在这种情况下我应该寻找什么替代方案吗?处理
URI
是很棘手的。你打算用它做什么?也许有更好的选择。。始终有效的一件事是获取现有类的类文件,例如
Foo.class.getResource(“Foo.class”)
。使用链接答案的解决方案,以一种与默认文件系统、zip/jar文件以及模块映像一起工作的方式获取路径。一旦拥有类文件的
路径
getParent()
将为您提供目录和操作,如
Files.list(…)
Files.copy(…)
工作顺利。除非
Foo
是嵌套类,
Foo.class.getResource(“Foo.class”)
应始终至少适用于所有标准类装载机。