2013-02-28 25 views
7

Il mio IDE è eclissi e il mio progetto è un'applicazione javaFX standalone (pura architettura CS con framework OSGI).Come utilizzare javaFX Preloader con l'applicazione standalone in Eclipse?

Come utilizzare Preloader in modo che il preloader venga avviato prima dell'applicazione principale e nascosto successivamente?

ho trovato un certo codice in http://docs.oracle.com/javafx/2/deployment/preloaders.htm#BABGGDJG

Ma io ancora non so come distribuire il Preloader con il mio avvio dell'applicazione in un quadro OSGi. Io do qualche codice della mia applicazione di avvio di seguito:

public class MyPrjMain extends Application { 
    private static Stage primaryStage; 

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

     init(primaryStage); 

     primaryStage.show(); 
    } 
} 

Grazie mille, tutti.

+0

supporto a qualcuno? –

risposta

25

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:

  1. Creare una startup Stage nel metodo dell'applicazione start.
  2. Inserire un'immagine splash e ProgressBar nella fase di avvio.
  3. Avere uno sfondo task per lunghi processi di inizializzazione dell'applicazione.
  4. L'inizializzazione del report torna alla fase di avvio dall'attività in background.
  5. 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.

+0

Grazie mille, molto aborativo. –

+0

Il problema in OSGi è che non si sta iniziando con il proprio Jar ma si avvia il sistema OSGi. Penso che la soluzione migliore sia usare una combinazione di Java-Splash e la propria fase di avvio. Credo ancora che lo scopo principale di Preloader sia sempre stato l'utilizzo di Applet/Webstart. – tomsontom

0

IMHO a Preloader ha senso solo quando si esegue come applet o webstart perché il preloader può essere impacchettato come Jar extra che viene scaricato per primo ed eseguito mentre il resto dell'applicazione viene scaricato in background.

Quindi il mio suggerimento sarebbe quello di aprire una fase al primo punto nel tempo in cui si ottiene uno stage e ad es. mostra uno splash.

+0

Grazie a tomsontom, vuoi dire che Preloader non è per l'applicazione javaFX standalone ma solo per "applet o webstart"? Devo implementare lo "Splash" con uno stage? Jface ha una pagina AbstractSplashHandler per Splash, è davvero buona ... –

+0

Sì e sì ma vorrei usare il supporto di Javas per la visualizzazione delle immagini splash e sostituirlo con uno stage se è necessaria l'interattività - Penso anche che il packager nativo abbia splash-screen supporto! Non dovresti utilizzare Eclipse Launcher e Splash perché questo ad es. porta su mac a un dead lock per l'avvio di JavaFX. Daremo un'occhiata alla situazione di splash per un cliente nelle prossime settimane, quindi non è improbabile che vedrete molto presto le classi in codebase ee (fx) clipse dandovi un facile accesso ad esso. – tomsontom

+0

Ho intenzione di dare un'occhiata alla situazione di splash per un cliente nelle prossime settimane, quindi non è improbabile che vedrete molto presto le classi in e (fx) clipse codebase dandovi un facile accesso ad esso. --- aspettando le tue buone notizie. :) Grazie! –

Problemi correlati