为什么Fantom不能在罐子里找到资源?

时间:2010-11-22 16:05:54

标签: java resources jar fantom

我最近开始使用Fantom。我有一个包含资源的jar文件(在本例中为svg图像)。我可以使用jar中的类,但资源不会加载:Thread.currentThread().getContextClassLoader().getResourceAsStream("name")返回null。当我在仅Java的上下文中使用这个完全相同的jar时,它可以很好地找到资源。

非常感谢有关如何调试甚至解决此问题的任何建议。

4 个答案:

答案 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)。