Как использовать JavaFX Preloader с автономным приложением в Eclipse?

моя IDE-eclipse, а мой проект-автономное приложение javaFX (чистая архитектура CS с OSGi framework).

Как использовать Preloader таким образом, preloader будет запущен перед моим основным приложением и скрыт позже?

Я нашел код в http://docs.oracle.com/javafx/2/deployment/preloaders.htm#BABGGDJG

но я все еще не знаю, как развернуть Preloader с моим приложением запуска в OSGi framework. Я даю некоторый код мое приложение запуска ниже:

public class MyPrjMain extends Application {
    private static Stage primaryStage;

    public void start(final Stage stage) throws BusinessException {
        primaryStage = stage;

        init(primaryStage);

        primaryStage.show();
    }
}

большое спасибо всем.

2 ответов


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


мой ответ содержит общую информацию о Preloader функциональность стиля в JavaFX. В вашем вопросе конкретно упоминается Preloader использование в среде Eclipse и OSGI, но я не буду напрямую обращаться к этому сценарию, поскольку я не используйте эти технологии. Надеюсь, Общая информация по-прежнему применима к вашему сценарию.

1. Java имеет встроенную поддержку отображения заставки при запуске Java.

достоинства и недостатки:

+ самый простой способ получить отдельное приложение, чтобы показать фоновое изображение.

+ может быть отображается очень быстро => это аргумент, вводимый в процесс VM, поэтому (предположительно) он может отображаться даже до того, как сама VM полностью инициализирована.

- имеет ограниченные возможности => позволяет отображать только изображение, а не другие функции предзагрузчика, такие как отчет о ходе инициализации, анимация, приглашения для входа и т. д. (Если вы используйте AWT APIs)

- не будет работать на всех платформах до Java 8 (см. вопрос Mac: Невозможно использовать-splash: с JavaFX 2.2 и JDK 7).

2. Preloaders может использоваться для автономных приложений.

на JavaFX Preloader учебник есть пример в разделе 9.3.4 Using a Preloader to Display the Application Initialization Progress. Учебник содержит исполняемый код LongInitAppPreloader и LongInitApp classes (используйте имена классов, которые я предоставляю в этом ответе, поскольку одно имя в учебнике в настоящее время неверно).

пример автономного приложения имеет длительное время инициализации и пользовательский Preloader обеспечивает обратную связь о ходе инициализации. Образец имитирует длинную инициализацию через задание С Thread.sleep вызов, но реальное приложение будет делать что-то вроде установления сетевых подключений, получения и анализа сетевых данных и настройки начального приложения сцены.

Предзагрузчики не относятся к апплетам и WebStart, но в первую очередь предназначены для эти типы развертывания. Процесс инициализации апплета и WebStart сложнее, чем автономная инициализация приложения, поэтому большая часть документации Preloader посвящена этим более сложным сценариям.

3. Вам не нужно устанавливать Preloader в отдельную банку.

вы можете Preloader в той же банке, что и ваш приложение класса. Для больших приложений, динамически развертываемых и обновляемых при загрузке по сети такие протоколы, как функция webstart, размещение Preloader в отдельной банке имеет смысл. Для автономных приложений, выполняющих инициализацию на основе сети, это, вероятно, не имеет большого значения, и отдельный шаг упаковки может быть пропущен для упрощения процесса сборки и развертывания.

4. Вы можете достичь функциональности стиля Preloader без использования Preloader.

много (не все) функциональности Preloader можно достигнуть без подклассов Preloader.

вы можете:

  1. создание загрузочного этап в старт метод.
  2. поставьте заставку и прогрессбар на стадии запуска.
  3. предпосылки задание для длительных процессов инициализации приложения.
  4. отчет о ходе инициализации обратно на этапе запуска с вашего фоновая задача.
  5. по завершении инициализации, либо:
    • a. Замените этап запуска новым этапом приложения или
    • b. Замените содержимое сцены на этапе запуска новой сценой для приложения.

5b, вероятно, предпочтительнее, так что вам не нужно создавать несколько окон.

примеры этой стратегии см. В моих ответах на следующие вопросы вопросы:

соответствующий пример кода для отображения заставок мониторинга прогресса в JavaFX без использования Preloader - Это:

приведенный выше код может быть переработан для использования подкласса Preloader вместо этого, в этом случае существует четко определенная структура для уведомления о событиях инициализации приложения и доступны более гибкие модели развертывания (например, preloader в отдельном jar). Однако использование Preloader может быть немного сложнее. В некоторых случаях это может не стоит время, чтобы понять Preloader основы.

5. Приложения WebStart имеют поддержку jnlp для Splash Images

(этот момент довольно неуместен и просто включен для полноты).

я верю в это приложения webstart могут иметь флаг в своем файле jnlp чтобы показать образ запуска при запуске приложения webstart, но я никогда не мог заставить этот флаг работать в приложении JavaFX 2, только в Swing приложение, и даже тогда это не было все, что надежно, как он будет отображаться только во второй раз приложение было запущено.


IMHO Preloader имеет смысл только тогда, когда вы работаете как апплет или webstart, потому что preloader может быть упакован как дополнительный Jar, который загружается первым и выполняется, а остальная часть вашего приложения загружается в фоновом режиме.

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