Questa è una risposta lunga, la risposta rapida per gli impazienti è scaricare questo sample code for displaying a splash page for an intensive startup task e vedere se è adattabile alla situazione.
La mia risposta fornisce informazioni di carattere generale su Preloader funzionalità stile in JavaFX. La tua domanda menziona specificamente l'uso di Preloader
in un ambiente Eclipse e OSGI, ma non affronterò direttamente tale scenario poiché non utilizzo tali tecnologie. Speriamo che le informazioni generali siano ancora applicabili al tuo scenario.
1. Java ha il supporto nativo per la visualizzazione di una pagina iniziale all'avvio di Java.
- Questo funziona utilizzando il
-splash:<image>
VM switch.
Vantaggi e svantaggi:
+
Il modo più semplice per ottenere la vostra applicazione stand-alone per mostrare una splash immagine.
+
Può essere visualizzato molto rapidamente => è un argomento di input per il processo VM, quindi (presumibilmente) può essere visualizzato anche prima che la VM stessa sia completamente inizializzata.
-
ha caratteristiche limitate => permette solo la visualizzazione di un'immagine, senza altre caratteristiche preloader come la segnalazione di progresso inizializzazione, l'animazione, le credenziali richieste, ecc (a meno che non make use of AWT APIs)
-
non funziona su tutti piattaforme fino a Java 8 (vedere il numero Mac: Impossible to use -splash: with JavaFX 2.2 and JDK 7).
2. I preloader possono essere utilizzati per applicazioni standalone.
Il JavaFX Preloader tutorial ha un esempio nella sezione 9.3.4 Using a Preloader to Display the Application Initialization Progress
. Il tutorial fornisce codice di esempio eseguibile nelle classi LongInitAppPreloader
e LongInitApp
(utilizzare i nomi di classe forniti in questa risposta come un nome nel tutorial è attualmente errato).
L'applicazione standalone di esempio ha un tempo di inizializzazione lungo e un valore personalizzato Preloader
fornisce un feedback sull'avanzamento dell'inizializzazione. L'esempio simula la lunga inizializzazione tramite un Task con una chiamata Thread.sleep
, ma un'applicazione reale farebbe qualcosa come stabilire connessioni di rete, recuperare e analizzare i dati di rete e impostare l'applicazione iniziale Scene.
I precaricatori non sono specifici per applet e WebStart, ma sono principalmente destinati a tali tipi di distribuzione. Il processo di inizializzazione dell'applet e di WebStart è più complesso dell'inizializzazione di applicazioni standalone, quindi gran parte della documentazione di Preloader è dedicata a quegli scenari più complessi.
3. Non è necessario posizionare un Preloader in un JAR separato.
È possibile inserire lo Preloader
nello stesso JAR della classe Application. Per le applicazioni di grandi dimensioni distribuite dinamicamente e aggiornate su protocolli di caricamento di rete come WebStart, posizionare il Preloader
in un JAR separato ha senso. Per le applicazioni autonome che eseguono l'inizializzazione basata sulla rete, probabilmente non fa molta differenza e la fase di confezionamento separata potrebbe essere saltata per semplificare il processo di creazione e distribuzione.
4. È possibile ottenere funzionalità di stile Preloader senza utilizzare un Preloader.
Gran parte (non tutte) della funzionalità Preloader può essere ottenuta senza sottoclasse Preloader.
È possibile:
- Creare una startup Stage nel metodo dell'applicazione start.
- Inserire un'immagine splash e ProgressBar nella fase di avvio.
- Avere uno sfondo task per lunghi processi di inizializzazione dell'applicazione.
- L'inizializzazione del report torna alla fase di avvio dall'attività in background.
- Al completamento dell'inizializzazione:
- a. Sostituire la fase di avvio con una fase di applicazione appena creata O
- b. Sostituisci il contenuto della scena nella fase di avvio con una nuova scena per la tua applicazione.
5b è probabilmente preferito in modo che non c'è bisogno di creare più finestre.
Per esempi di questa strategia, vedere le mie risposte alle seguenti domande:
Il codice di esempio relativo per la visualizzazione di monitorare i progressi splash screen in JavaFX senza utilizzare un Preloader
è:
Il codice precedente potrebbe essere riscritta per utilizzare una sottoclasse Preloader invece, nel qual caso v'è un quadro ben definito per la notifica di eventi di inizializzazione dell'applicazione e modelli di distribuzione più flessibili (ad esempio preloader in jar separato) sono disponibili. Tuttavia l'uso di un Preloader
potrebbe essere un po 'complicato. Per alcune implementazioni, potrebbe non valere la pena conoscere il framework Preloader
.
5. Apps WEBSTART hanno il supporto per JNLP Splash Immagini
(questo punto è abbastanza irrilevante e solo incluso per completezza).
Credo che webstart applications can have a flag in their jnlp file mostri l'immagine di avvio all'avvio dell'applicazione webstart, ma non sono mai riuscito a far funzionare quel flag in un'applicazione JavaFX 2, solo in un'applicazione Swing e anche allora non era tutto ciò che è affidabile in quanto sarebbe visualizzato solo la seconda volta che l'applicazione è stata lanciata.
supporto a qualcuno? –