Где javafx.scene.image.Image (“flower.png”) искать flower.png?

Я хотел бы знать, что алгоритм относительного пути разрешения конструктора JavaFX Image:

  1. Автономные приложения.
  2. Браузер развернул приложения.
  3. Webstart развернул приложения.

Если алгоритм может выглядеть в нескольких местах, я хотел бы знать, что они представляют для каждого из вышеперечисленных сценариев развертывания.

Если поведение для автономных приложений отличается, когда приложение помещено в банку, я бы тоже хотел это знать.

Затем пользователь предоставляет относительный путь к new Image(String url) он будет относиться к workdir приложения aka System.getProperty("user.dir")

  1. Для автономного приложения это папка, в которой вы запускали приложение из
  2. Для запуска веб-запуска из командной строки ( javaws myfxapp.jnlp ) он работает так же, как и с автономным приложением
  3. Для запуска плагина или приложения webstart, загруженного из браузера, вы не можете надежно убедиться в расположении рабочего места. Это зависит от браузера и даже от установленных плагинов для этого браузера.

Таким образом, общее направление: для автономных приложений используйте url же, как вы будете использовать его в new File(String url) . Для jnlp / plugin используйте полный url с использованием протокола или Class.getResource() .

Обновление: Пожалуйста, обратите внимание, что это поведение будет уточнено и изменено в 2.2. См. http://javafx-jira.kenai.com/browse/RT-18291

Следующий комментарий относится к RT-18291 и описывает предполагаемые изменения для версии 2.2:

Martin Sladecek добавил комментарий – 15 мая 2012 10:53 AM После обсуждения с Ричардом Баиром мы решили изменить текущее (недокументированное) поведение для путей. В настоящее время они рассматриваются как user.dir relative. Весь путь, с или без ведущей косой черты, теперь будет разрешен как относительный к classpath, который будет соответствовать CSS, и больше соответствует ожиданиям пользователей. Для относительных путей user.dir URL-адрес «file:» может использоваться по-прежнему.

Ответ: «/», если вы используете getClass().getResourceAsStream() , то есть корень вашего файла jar (внутри него). Не user.dir, ни где пакет размещен

  1. каталог поиска, где getClass().getName().toString() файлы classов (имя classа getClass().getName().toString() ), связанные с вашим .java-файлом, копируются и вставляются изображение
  2. Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg")); должен.

В NetBeans находится каталог, в котором присутствуют classы NetBeansProjects / JavaFXProjectName / build / classes / packageName /

Interesting Posts
Давайте будем гением компьютера.