不要标记为重复!
听我说;我见过的所有解决方案都很好,但我不了解使用以下方法加载资源时类路径的工作原理:
ClassLoader classLoader = getClass().getClassLoader()
我想设置一个资源加载器(名为ResourceLoader
),可以从jar包中的 加载。
因此,如果加载程序放在com.spikespaz.engine.loader.ResourceLoader
中,我就不想陷入com.spikespaz.engine.loader
的相对路径。
我希望能够从com.spikespaz.game.resources.textures
和com.spikespaz.game.resources.models
加载,而无需将阅读器放在父目录中。
我发现的是:https://stackoverflow.com/a/3862115/2512078
但是根据我的理解,他的答案中的所有选项必须相对于加载它们的类。 (getClass()
)有没有解决方法,或者我误解了它?
如果我误解了它,有人可以更好地解释一下吗?
任何解决方案都必须与jar包的 exact root 或开发环境的源相关,而且我不需要在该根目录中放置任何内容。
感谢。
答案 0 :(得分:0)
我认为你误解或误读了他的回答https://stackoverflow.com/a/3862115/2512078
普通的类加载器和上下文类加载器都能够使用绝对路径加载资源。
要使用普通的类加载器执行此操作,请确保资源路径前面有一个前导/
,否则它会加载相对于加载它的类的包的资源。
this.getClass().getResource("/foo/bar.txt")`
上下文类加载器永远不会相对于类加载资源,路径总是被解释为绝对路径。
Thread.currentThread().getContextClassLoader().getResource("foo/bar.txt")
注意:不要在上下文类加载器中使用前导斜杠。