2013-12-01 2 views
5

У меня в настоящее время есть большая проблема с загрузкой CSS и изображений в JavaFX.JavaFX загрузка изображений из CSS в Webstart

Цель состоит в том, чтобы загрузить JavaFX изображения, определенные в файле CSS. Я получаю, что это легко работает в среде IDE и в автономном исполнении. Но как только я попробую приложение как апплет и запустил его в контексте браузера, все не удается.

Файл CSS по-прежнему загружается должным образом, но файлы изображений остаются пустыми. К сожалению, я не могу найти способ сделать журнал JavaFX причиной сбоя загрузки изображения. Все изображения расположены в подкаталогах от расположения файла CSS и доступны, например, как это:

.button-gray { 
    -fx-border-image-source: url("button/buttongray.png"); 
} 

Файл CSS находится в том же пакете, что и класс, который обрабатывает его загрузки и является нагрузкой, как это :

final URL css = Util.class.getResource("sheet.css"); 
if (css != null) { 
    parent.getStylesheets().add(css.toExternalForm()); 
} 

Я попытался уже размещения ресурсов в корневом каталоге и загрузите его с Util.class.getClassLoader.getResource(...) и Thread.currentThread().getContextClassLoader.getResource(...). Оба работали нормально, если приложение было выполнено как самостоятельное. Ни один из них не работал, если приложение запускается из контекста аплета webstart.

Но, как я уже говорил. Во всех случаях нет никаких указаний на то, что CSS не является загрузкой. Стили, определенные в таблице стилей, применяются правильно, за исключением изображений.

У меня заканчивается идея, в чем причина этого. Я упаковываю и публикую приложение, используя плагин javafx gradle от shemnon.

Строительство среды:

  • Oracle Java 1.7b45 x64
  • Gradle 1,9

Каждый знает, как исправить эту проблему или имеет какие-либо идеи, как отлаживать его. К сожалению, средства ведения журнала JavaFX (даже CSS Logger) и консоль трассировки апплетов не дают никаких указаний на то, что проблема.

Новая информация!

Файл JNLP находится здесь: JNLP-File

Как всегда, этот файл не является проблемой. Кажется, что проблема состоит в генерации двоичного файла css, который является частью процесса развертывания JavaFX для webstart. В этом двоичном файле по какой-то еще неизвестной причине есть ссылка на файл CSS внутри, создавая среду. Это заставляет загрузчик CSS загружать файлы изображений из местоположения на моем сервере зданий. Что-то, что не работает на моем локальном компьютере. С другой стороны, сборки, которые я делал на моем локальном компьютере, работают, потому что файлы все еще находятся в том месте, где он ищет.

Так что теперь проблема ограничивается созданием двоичного кода css, в котором хранится полностью неправильная ссылка на файл.

+0

Возможно, я заявляю очевидное, но на всякий случай: вы * подтвердили, что JAR, загруженный WebStart *, содержит * изображения? –

+0

Обычно это очевидные вещи, которые вызывают такие проблемы. Но не в этом случае. Да, я проверил, находятся ли файлы в JAR, и они есть. Я даже проверил файл, находящийся внутри кеша WebStart. – Nitram

+0

Кажется, у кого-то нет идеи. Кто-нибудь знает о рабочих примерах приложений веб-старта JavaFX, которые загружают изображения из файла CSS? – Nitram

ответ

0

1) Можете ли вы опубликовать файл .jnlp, который вы используете для развертывания приложения? Неправильный .jnlp может вызвать проблемы с загрузкой ресурса.

2) Дайте нам точный вызов Thread.currentThread(). GetContextCLassLoader.getResource (""), который вы используете.

3) Сообщайте содержимое файла .jar, с точной папкой/структурой пути файла (ов) в банке, которую необходимо загрузить. Например, «Мой код ищет example.png, он должен находиться в файле pics.jar внутри папки com/mycompany/myimages», что-то в этом роде.

WebStart предпринимает некоторые шаги, чтобы работать, но я подозреваю, что ответ лежит где-то там. Если все остальное не удается, я обнаружил, что JaNeLa помогает в отладке проблем с запуском веб-запуска. http://pscode.org/janela/

+0

JaNeLa терпит неудачу, когда дело доходит до файлов jnlp JavaFX, так как оно не поддерживает правильные пространства имен. – Nitram

0

Вы пробовали загрузки файла CSS с:

final String css = getClass.getResource("sheet.css").toExternalForm(); 

parent.getStylesheets.add(css); // taken that parent is the name for the Scene. 

Для CSS:

-fx-border-image-source: url("../button/buttongray.png"); 

Использование URL и Util.class это не то, что является общим для использования для загрузки таблицы стилей AFAIK ,

Возможно, попробуйте среду IDE NetBeans 7.4. Лично я не знаю Gradle.

+0

Я попробовал первый. И второй не удается во всех случаях, потому что файл не находится там. – Nitram

+0

Что делать, если вы попробовали это, как в этом туротическом, используя изображение. http://docs.oracle.com/javafx/2/ui_controls/button.htm. Не уверен, что css - это способ использовать изображение. – WonderWorld

+0

Я отредактировал свой вопрос, добавив новую информацию, которую я нашел. Изображения работают в основном. Но как только CSS преобразуется в двоичный CSS, все идет не так. – Nitram

 Смежные вопросы

  • Нет связанных вопросов^_^