2012-02-17 13 views
5

La nostra applicazione piattaforma/Netbeans Maven utilizza un'immagine personalizzata all'avvio, sostituendoanimato Splash Screen su Netbeans Platform app

Nbm-branding> core.jar> org.netbeans.core.startup> splash.gif

Ho provato a renderlo un .gif animato, ma viene visualizzato solo il primo fotogramma.

Come si potrebbe implementare uno splash screen animato, magari eseguendo alcune animazioni di finestre JavaFX?

Ho visto another other SO question, ma non è stato davvero risposto - si prega di accorgo che sto chiedendo come integrare una schermata iniziale personalizzata con la mia domanda Netbeans Platform, e non come costruire in realtà.

risposta

2

Sorprendentemente, ho scoperto come collegare una schermata iniziale personalizzata basata su this post about user authentication and authorization.

In sostanza, si ha la necessità di scrivere un'altra classe di start-up, invece di default della piattaforma:

import java.lang.reflect.Method; 

public class CustomStartup { 

    private static final String NB_MAIN_CLASS = "org.netbeans.core.startup.Main"; 

    public static void main(String[] args) throws Exception { 
     // do whatever you need here (e.g. show a custom login form) 
     System.out.println("Hello world! I am a custom startup class"); 
     JWindow splash = initSplash(); 

     // once you're done with that, hand control back to NetBeans 
     ClassLoader classloader = Thread.currentThread().getContextClassLoader(); 
     Class<?> mainClass = Class.forName(NB_MAIN_CLASS, true, classloader); 

     Object mainObject = mainClass.newInstance(); 
     Method mainMethod = mainClass.getDeclaredMethod("main", new Class[]{String[].class}); 
     mainMethod.invoke(mainObject, (Object) args); 

     splash.setVisible(false); 
    } 
} 

in quella classe, si può creare una fase di JavaFX, incorporare in un JWindow, e mostrarlo:

public JWindow initSplash(){ 
     JWindow window = new JWindow(); 
     final JFXPanel fxPanel = new JFXPanel(); 
     window.add(fxPanel); 
     window.setVisible(true); 
     window.setLocationRelativeTo(null); 

     Platform.runLater(new Runnable() { 

      @Override 
      public void run() { 
       Scene scene = new Scene(new CustomFxSplash(), 475, 300, true); 
       fxPanel.setScene(scene); 
      } 
     } 
     return window; 
} 

Altre cose da ricordare sono:

  • Sopprimere la schermata iniziale originale di NetBeans eseguendo l'app con il parametro --nosplash.

  • Richiamare la classe di inizializzazione personalizzato eseguendo la vostra applicazione con il parametro di -J-Dnetbeans.mainclass=com.package.splash.CustomStartup

  • Come il link suggests questa classe personalizzata deve essere sul percorso di classe di inizializzazione della piattaforma, il che significa all'interno della cartella platform/core.

1

La versione corrente della classe NetBeans responsabile del rendering della schermata iniziale può essere visualizzata qui online: org.netbeans.core.startup.

Il codice colpevole che impedisce il GIF da animare è questa linea (line 546)

graphics.drawImage(image, 0, 0, null); 

Affinché il GIF animare la ImageObserver dovrà essere specificato invece di essere impostato null e poi ridipingere deve essere chiamato quando imageUpdate() viene chiamato su ImageObserver.

Un esempio di visualizzazione di una gif animata può essere vista qui: Relationship Between Animated Gif and Image Observer

Quindi, per quanto posso vedere si sia necessario cambiare il codice sopra la piattaforma NetBeans e ricostruirlo per l'applicazione o si dovrò crea il tuo splash screen da zero da usare al posto di quello NetBeans.

Spero che trovi utile!

+0

Molto utile! Se decido di creare una schermata iniziale dall'inizio, qualche suggerimento su come eseguirlo invece di quello nativo di NetBeans? – Marcelo

+0

Non ne sono sicuro. L'attuale classe di splash screen è un singleton e, se solo fosse usato il pattern del localizzatore di servizi, avresti potuto iniettare il tuo splash screen, ma sfortunatamente no (potrebbe essere utile registrare una richiesta di bug/funzionalità NetBeans per questo). Ma so che è possibile disabilitare la schermata iniziale predefinita, quindi devi solo capire come e quando mostrare il tuo. – ughzan