2010-11-22 101 views
2

我最近開始使用Fantom。我有一個包含資源的jar文件(在這種情況下是svg圖像)。我可以使用jar中的類很好,但資源不會加載:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")返回null。當我在僅用Java的上下文中使用完全相同的jar時,它可以很好地找到資源。爲什麼Fantom無法在jar中找到資源?

有關如何調試甚至解決此問題的任何建議將不勝感激。

+0

我對Fantom一無所知(雖然看起來很酷但很快),但似乎有一些Classloader操縱/隔離正在進行。可能與這方面的某些事情有關,例如:http://fantom.org/sidewalk/topic/1208。 – 2010-11-22 17:09:06

+0

嘗試使用以/開頭的完整路徑解決資源問題,並查看是否有幫助。 – Knubo 2010-11-22 18:34:54

回答

1

錯誤的部分是Thread.currentThread().getContextClassLoader()

的Java:AnyClassFromJar.class.getClassLoader()工作

魅影:Class.forName("AnyClassFromJar").getClassLoader()應該工作

2

它必須在罐子裏嗎?如果您可以直接在波德堅持下去,你可以使用access文件是這樣的:

file := Pod.find("myPod").file(`/path/to/file.ext`) 
0

如果我沒有記錯,.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) 
0

嘗試 '/名' 而不是 '名'。這適用於我(用Java)。