我最近開始使用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