我最近开始使用Fantom。我有一个包含资源的 jar 文件(在本例中为 svg 图像)。我可以很好地使用 jar 中的类,但资源不会加载:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")
返回null
。当我在纯 Java 上下文中使用这个完全相同的 jar 时,它可以很好地找到资源。
任何有关如何调试甚至解决此问题的建议将不胜感激。
它必须在罐子里吗?如果您直接将其粘贴到您的 Pod 中,您可以使用如下访问文件:
file := Pod.find("myPod").file(`/path/to/file.ext`)
错误的部分是Thread.currentThread().getContextClassLoader()
爪哇:AnyClassFromJar.class.getClassLoader()
作品
幻想:Class.forName("AnyClassFromJar").getClassLoader()
应该工作
如果我.jar
没记错的话,无法访问文件以获取资源,但是由于.jar
文件只不过是带有精美扩展名的 Zip 文件,因此您可以像这样打开它们。
这是我的示例文件夹结构(但任何结构都可以)。
ExampleDir
|
+--- TestZip.fan
+--- testOpen.jar
|
+--- META-INF
| +--- email.png
| ...
|...
你打开testOpen.jar
这样的:
class TestZip
{
static Void main(Str[] args)
{
jar := Zip.open(File(`testOpen.jar`))
png := jar.contents[`/META-INF/email.png`].readAllBuf
jar.close
}
}
编辑:在 Fantom 板上对此进行了讨论,似乎这个例子应该有效。
buff := Interop.toFan(Class.forName("net.testOpen.Foo").getClassLoader().getResourceAsStream("email.png")),4096)
尝试使用“/name”而不是“name”。这对我有用(在Java中)。