我最近开始使用Fantom。我有一个包含资源的jar文件(在本例中为svg图像)。我可以使用jar中的类,但资源不会加载:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")
返回null
。当我在仅Java的上下文中使用这个完全相同的jar时,它可以很好地找到资源。
非常感谢有关如何调试甚至解决此问题的任何建议。
答案 0 :(得分:2)
它必须在罐子里吗?如果您将其直接粘贴在Pod中,则可以使用access这样的文件:
file := Pod.find("myPod").file(`/path/to/file.ext`)
答案 1 :(得分:1)
错误的部分是Thread.currentThread().getContextClassLoader()
Java:AnyClassFromJar.class.getClassLoader()
正常工作
Fantom:Class.forName("AnyClassFromJar").getClassLoader()
应该有效
答案 2 :(得分:0)
如果我没记错的话,无法访问.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)
答案 3 :(得分:0)
尝试'/ name'而不是'name'。这对我有用(用Java)。