2

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

任何有关如何调试甚至解决此问题的建议将不胜感激。

4

4 回答 4

2

它必须在罐子里吗?如果您直接将其粘贴到您的 Pod 中,您可以使用如下访问文件:

file := Pod.find("myPod").file(`/path/to/file.ext`)
于 2011-02-05T16:41:24.777 回答
1

错误的部分是Thread.currentThread().getContextClassLoader()

爪哇:AnyClassFromJar.class.getClassLoader()作品

幻想:Class.forName("AnyClassFromJar").getClassLoader()应该工作

于 2011-07-03T14:32:41.673 回答
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)
于 2011-07-03T12:25:46.647 回答
0

尝试使用“/name”而不是“name”。这对我有用(在Java中)。

于 2013-04-05T10:29:12.187 回答