代码之家  ›  专栏  ›  技术社区  ›  Jorn

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

  •  2
  • Jorn  · 技术社区  · 14 年前

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

    对于如何调试甚至解决这个问题的任何建议都将非常感谢。

    4 回复  |  直到 14 年前
        1
  •  1
  •   frictionlesspulley sameer    13 年前

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

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

    范托姆: Class.forName("AnyClassFromJar").getClassLoader() 应该有用

        2
  •  2
  •   afrankvt    14 年前

    一定要放在罐子里吗?如果你把它直接贴在你的吊舱里,你可以用 access 像这样的文件:

    file := Pod.find("myPod").file(`/path/to/file.ext`)
    
        3
  •  0
  •   Daniel Fath    13 年前

    如果我没记错, .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)
    
        4
  •  0
  •   Paul    12 年前

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