2013-02-28 15 views
7

Moje IDE jest zaćmieniem, a mój projekt jest samodzielną aplikacją javaFX (czysta architektura CS ze środowiskiem OSGI).Jak używać preloadera javaFX z samodzielną aplikacją w Eclipse?

Jak korzystać z Preloadera, więc preloader zostanie uruchomiony przed moją główną aplikacją i ukryty później?

znalazłem jakiś kod w http://docs.oracle.com/javafx/2/deployment/preloaders.htm#BABGGDJG

Ale nadal nie wiem, jak wdrożyć preloader z mojej aplikacji startowej w ramach OSGI. daję trochę kodu mojej aplikacji startowej poniżej:

public class MyPrjMain extends Application { 
    private static Stage primaryStage; 

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

     init(primaryStage); 

     primaryStage.show(); 
    } 
} 

Dziękuję bardzo wszystkim.

+0

ktoś wsparcie? –

Odpowiedz

25

To jest długa odpowiedź, szybka odpowiedź dla niecierpliwych jest to, aby pobrać ten sample code for displaying a splash page for an intensive startup task i sprawdzić, czy można go dostosować do sytuacji.


Moja odpowiedź zawiera ogólne informacje o funkcji stylu w języku JavaFX w stylu Preloader. W Twoim pytaniu wyraźnie wspomniano o korzystaniu z Preloader w środowisku Eclipse i OSGI, ale nie będę bezpośrednio zajmował się tym scenariuszem, ponieważ nie korzystam z tych technologii. Mam nadzieję, że ogólne informacje będą nadal obowiązywały w twoim scenariuszu.

1. Java ma natywną obsługę wyświetlania strony powitalnej po uruchomieniu Java.

  • Działa to za pomocą -splash:<image>VM switch.

Zalety i wady:

+ Najprostszym sposobem, aby uzyskać autonomiczną aplikację, aby pokazać obraz powitalny.

+ Może być wyświetlany bardzo szybko => jest to argument wejściowy do procesu VM, więc (prawdopodobnie) może być wyświetlony, nawet zanim sama VM zostanie w pełni zainicjalizowana.

- ma ograniczone możliwości => tylko umożliwia wyświetlanie obrazu, a nie inne cechy, takie jak preloader raportowania postępów inicjalizacji, animacji, itp zalogować monity (chyba make use of AWT APIs)

- nie będzie działać na wszystkich platformy do wersji Java 8 (patrz wydanie Mac: Impossible to use -splash: with JavaFX 2.2 and JDK 7).

2. Wstępnie ładowane mogą być używane do samodzielnych aplikacji.

Przykładowo w sekcji 9.3.4 Using a Preloader to Display the Application Initialization Progress. Samouczek udostępnia wykonywalny przykładowy kod w klasach LongInitAppPreloader i LongInitApp (użyj nazw klas, które podaję w tej odpowiedzi, ponieważ jedna nazwa w tutorialu jest obecnie błędna).

Przykładowa autonomiczna aplikacja ma długi czas inicjalizacji, a niestandardowy Preloader zapewnia informację zwrotną na temat postępu inicjowania. Próbka symuluje długą inicjalizację za pomocą połączenia Task z wywoływaniem Thread.sleep, ale prawdziwą aplikacją byłoby np. Nawiązywanie połączeń sieciowych, pobieranie i analizowanie danych sieciowych oraz konfigurowanie początkowej aplikacji Scene.

Wstępne ładowanie nie jest specyficzne dla apletów i programu WebStart, ale jest głównie ukierunkowane na te typy wdrażania. Proces inicjowania apletu i WebStart jest bardziej złożony niż samodzielna inicjalizacja aplikacji, dlatego wiele dokumentacji Preloadera poświęcono bardziej złożonym scenariuszom.

3. Nie trzeba umieszczać Preloadera w oddzielnym pliku JAR.

Możesz umieścić Preloader w tym samym JAR co twoja klasa Application. W przypadku dużych aplikacji dynamicznie wdrażanych i aktualizowanych przez protokoły ładowania sieciowego, takie jak WebStart, umieszczenie Preloader w oddzielnym JAR ma sens. W przypadku autonomicznych aplikacji wykonujących inicjowanie oparte na sieci, prawdopodobnie nie robi to wielkiej różnicy i oddzielny etap pakowania może zostać pominięty, aby uprościć proces budowania i wdrażania.

4. Możesz osiągnąć funkcjonalność stylu Preloader bez użycia Preloadera.

Wiele (nie wszystkie) funkcji Preloader można uzyskać bez podklasy Preloader.

Można:

  1. Tworzenie uruchomienie Stage w start metody danej aplikacji.
  2. Umieść obraz powitalny i ProgressBar w fazie uruchamiania.
  3. Mieć tło task dla długich procesów inicjowania aplikacji.
  4. Powoduje zainicjowanie procesu inicjowania z powrotem do etapu uruchamiania z zadania w tle.
  5. Po zakończeniu inicjalizacji:
    • a. Zastąp etap uruchamiania nowoutworzonym stadium aplikacji OR
    • b. Zastąp zawartość sceny na etapie uruchamiania nową sceną dla aplikacji.

5b jest prawdopodobnie korzystne, dzięki czemu nie ma potrzeby tworzenia wielu okien.

Do przykładów tej strategii zobaczyć moje odpowiedzi na następujące pytania:

Odnośne przykładowy kod do wyświetlania Monitorowanie postępu ekranów powitalnych w JavaFX bez użycia Preloader to:

Powyższy kod może być refactored użyć zamiast podklasy wstępnego ładowania, w którym to przypadku nie jest dobrze zdefiniowane ramy zgłoszenia zdarzeń inicjalizacji aplikacji i bardziej elastycznych wzorów rozmieszczenia (np preloader w oddzielnym słoiku) są dostępne. Jednak użycie numeru Preloader może być nieco skomplikowane. W przypadku niektórych implementacji może nie być warta czasu na zrozumienie struktury Preloader.

5. Aplikacje webstart mieć wsparcie JNLP dla Splash obrazy

(punkt ten jest całkiem bez znaczenia i po prostu włączone dla kompletności).

Wierzę, że webstart applications can have a flag in their jnlp file wyświetla obraz startowy, gdy uruchamia się aplikacja Webstart, ale nigdy nie udało mi się uzyskać tej flagi do pracy w aplikacji JavaFX 2, tylko w aplikacji Swing, a nawet wtedy nie było wszystko to, co godne zaufania, ponieważ wyświetlałoby się tylko przy drugim uruchomieniu aplikacji.

+0

Bardzo dziękuję, bardzo miło. –

+0

Problem w OSGi polega na tym, że nie zaczynasz z własnym Jar, ale uruchamiasz system OSGi. Myślę, że najlepszym rozwiązaniem jest użycie kombinacji Java-Splash i własnego etapu uruchamiania. Nadal uważam, że głównym celem Preloadera jest i zawsze była apteka Applet/Webstart. – tomsontom

0

IMHO a Preloader ma sens tylko wtedy, gdy uruchamiasz się jako aplet lub webstart, ponieważ preloader może być spakowany jako dodatkowy Jar, który jest pobierany pierwszy i wykonywany, podczas gdy reszta aplikacji jest pobierana w tle.

Moją sugestią byłoby otwarcie etapu w pierwszym punkcie, w którym pojawi się stół montażowy i np. wyświetl powitalny.

+0

Dziękuję tomsontom, masz na myśli, że Preloader nie jest dla autonomicznej aplikacji javaFX, ale tylko dla "apletu lub webstartu"? Muszę zaimplementować "Splash" ze sceną? Jface ma stronę AbstractSplashHandler for Splash, jest naprawdę dobra ... –

+0

Tak i tak, ale użyłbym JavaScriptu do wyświetlania obrazu powitalnego i zastąpiłbym go etapem, gdyby potrzebna była interaktywność - myślę, że natywny pakiet ma ekran powitalny wsparcie! Nie powinieneś używać programów Eclipse Launcher i Splash, ponieważ np. prowadzi na mac do martwej blokady dla uruchamiania JavaFX. W najbliższych tygodniach przyjrzę się sytuacji "splash" dla klienta, więc nie ma wątpliwości, że wkrótce zobaczysz klasy e (fx) clipse codebase, co da ci łatwy dostęp do niego. – tomsontom

+0

Mam zamiar przyjrzeć się sytuacji splash dla klienta w ciągu najbliższych kilku tygodni, więc nie jest mało prawdopodobne, że wkrótce zobaczysz klasy w e (fx) bazie kodu Clipse, co daje ci łatwy dostęp do niej. --- czekam na wasze nowiny. :) dzięki! –

Powiązane problemy