Почему Fantom не может найти ресурс в банке? - PullRequest
2 голосов
/ 22 ноября 2010

Я недавно начал использовать Fantom . У меня есть файл JAR, который содержит ресурс (в данном случае svg изображение). Я могу использовать классы из фляги просто отлично, но ресурс не загружается: Thread.currentThread().getContextClassLoader().getResourceAsStream("name") возвращает null. Когда я использую тот же самый jar в контексте только Java, он может найти ресурс просто отлично.

Буду очень признателен за любые предложения по устранению или даже решению этой проблемы.

Ответы [ 4 ]

2 голосов
/ 05 февраля 2011

Это должно быть в банке?Если вы вставите его прямо в ваш Pod, вы можете использовать access файлы, подобные этим:

file := Pod.find("myPod").file(`/path/to/file.ext`)
1 голос
/ 03 июля 2011

Неправильная часть Thread.currentThread().getContextClassLoader()

Java: AnyClassFromJar.class.getClassLoader() работает

Фантом: Class.forName("AnyClassFromJar").getClassLoader() должно работать

0 голосов
/ 05 апреля 2013

Попробуйте «/ имя» вместо «имя».Это работает для меня (на Java).

0 голосов
/ 03 июля 2011

Если я правильно помню, файлы .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)
...