我最近开始使用Fantom。我有一个包含资源的jar文件(在这种情况下是svg图像)。我可以使用jar中的类很好,但资源不会加载:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")
返回null
。当我在仅用Java的上下文中使用完全相同的jar时,它可以很好地找到资源。为什么Fantom无法在jar中找到资源?
有关如何调试甚至解决此问题的任何建议将不胜感激。
我最近开始使用Fantom。我有一个包含资源的jar文件(在这种情况下是svg图像)。我可以使用jar中的类很好,但资源不会加载:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")
返回null
。当我在仅用Java的上下文中使用完全相同的jar时,它可以很好地找到资源。为什么Fantom无法在jar中找到资源?
有关如何调试甚至解决此问题的任何建议将不胜感激。
错误的部分是Thread.currentThread().getContextClassLoader()
的Java:AnyClassFromJar.class.getClassLoader()
工作
魅影:Class.forName("AnyClassFromJar").getClassLoader()
应该工作
它必须在罐子里吗?如果您可以直接在波德坚持下去,你可以使用access文件是这样的:
file := Pod.find("myPod").file(`/path/to/file.ext`)
如果我没有记错,.jar
文件不能被用于resoruces访问,但因为.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
}
}
编辑:有了这个就魅影板的讨论似乎这个例子应该工作。
buff := Interop.toFan(Class.forName("net.testOpen.Foo").getClassLoader().getResourceAsStream("email.png")),4096)
尝试 '/名' 而不是 '名'。这适用于我(用Java)。
我对Fantom一无所知(虽然看起来很酷但很快),但似乎有一些Classloader操纵/隔离正在进行。可能与这方面的某些事情有关,例如:http://fantom.org/sidewalk/topic/1208。 – 2010-11-22 17:09:06
尝试使用以/开头的完整路径解决资源问题,并查看是否有帮助。 – Knubo 2010-11-22 18:34:54