2010-11-22 7 views
2

最近、Fantomを使用し始めました。リソース(この場合はsvgイメージ)を含むjarファイルがあります。 jarのクラスを使用することはできますが、リソースはロードされません。Thread.currentThread().getContextClassLoader().getResourceAsStream("name")nullを返します。この全く同じjarファイルをJavaのみのコンテキストで使用すると、リソースがきれいに見つかります。なぜFantomはそのリソースをjarファイルで見つけることができませんか?

この問題をデバッグしたり、解決する方法についてのご意見は、大歓迎です。

+0

私はFantomについてよくわかりませんが(すばやく目を引くように見えますが)、Classloaderの操作/分離が行われているようです。この分野の何かと何か関係があるかもしれません。例:http://fantom.org/sidewalk/topic/1208。 –

+0

/で始まるフルパスでリソースのアドレスを指定してください。 – Knubo

+0

"フルパス"とは何を意味しますか?リソースはjarファイル内にあります。 – Jorn

答えて

1

間違った部分がThread.currentThread().getContextClassLoader()

のJavaです:Class.forName("AnyClassFromJar").getClassLoader()

2

Jar内にある必要はありますか?私が正しくリコール、.jarファイルはresorucesのためにアクセスすることはできませんが、.jarファイルは空想でZipファイル以外の何物でもありませんので、

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

使いたい瓶に入っています。私はそれをコントロールできません。 – Jorn

0

:あなたのポッドに直接それを固執する場合は、このようなaccessファイルを使用することができますあなたはそのように開くことができます。

ここでは、例のフォルダ構造を示しています(しかし、どのような構造も可能です)。

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 
    } 
} 

EDIT:この例が動作するはずと思われるのFantomボード上でこのについての議論を持ちます。

buff := Interop.toFan(Class.forName("net.testOpen.Foo").getClassLoader().getResourceAsStream("email.png")),4096) 
0

てみ代わりに '名前' の '/ name' を動作するはずです:

のFantom作品AnyClassFromJar.class.getClassLoader()。それは私のために働く(Javaで)。

関連する問題