Splash Screen animato su Netbeans Platform app
-
27-10-2019 - |
Domanda
Il nostro / applicazione piattaforma Netbeans Maven utilizza un'immagine personalizzata all'avvio, sostituendo
Nbm-branding> core.jar> org.netbeans.core.startup> splash.gif
Ho provato rendendolo un animato GIF, ma viene visualizzato solo il primo fotogramma.
Come sarebbe uno possibilmente andare sull'implementazione di una splash screen animato, forse eseguendo alcune animazioni delle finestre JavaFX?
Ho visto un'altra altra domanda SO , ma non è stato in realtà risposto -. preavviso si prega sto chiedendo di come integrare una schermata iniziale personalizzata con la mia domanda Netbeans Platform , e non come costruire in realtà
Soluzione
Sorprendentemente, ho trovato il modo di collegare una schermata iniziale personalizzata basata su questo post su autenticazione utente e l'autorizzazione .
In sostanza, uno ha bisogno 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 questa classe, si può creare una fase di JavaFX, incorporarlo in un JWindow
, e mostrarla:
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 NetBeans originali Splash Screen eseguendo la vostra applicazione con il parametro
--nosplash
. -
Chiama la classe di inizializzazione personalizzato eseguendo la vostra applicazione con il
-J-Dnetbeans.mainclass=com.package.splash.CustomStartup
parametro -
Mentre il link suggerisce questa classe personalizzata deve essere sul percorso di classe di inizializzazione della piattaforma significato all'interno della cartella
platform/core
.
Altri suggerimenti
La versione corrente della classe NetBeans che è responsabile per il rendering la schermata iniziale possono essere visualizzate on-line qui: 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 specificata anziché essere impostato per null
e quindi ridisegno deve essere chiamato quando imageUpdate()
viene chiamato sul ImageObserver
.
Un esempio di visualizzazione di una gif animata può essere vista qui: Relazione tra Gif Animate e Observer immagine
Quindi, per quanto posso vedere si sia necessario cambiare il sopra NetBeans codice della piattaforma e ricostruirlo per la vostra applicazione o si dovrà creare il proprio schermata iniziale da zero da usare al posto delle NetBeans uno.
Spero hai trovato utile!