Splash Screen animé sur l'application Netbeans Plate-forme
-
27-10-2019 - |
Question
Notre application de la plate-forme maven / Netbeans utilise une image personnalisée au démarrage, en remplaçant
Nbm-branding> core.jar> org.netbeans.core.startup> splash.gif
J'ai essayé en fait un .gif animé, mais seule la première image est affichée.
Comment peut-on aller peut-être au sujet de la mise en œuvre d'un écran de démarrage animé, peut-être en exécutant des animations de fenêtres JavaFX?
J'ai vu autre autre question SO , mais n'a pas été vraiment répondu -. Je préavis s'il vous plaît poser des questions sur comment intégrer un écran d'accueil personnalisé avec ma demande Netbeans plate-forme , et non comment construire réellement
La solution
De façon surprenante, j'ai découvert comment brancher un écran d'accueil personnalisé basé sur ce post sur l'authentification de l'utilisateur et l'autorisation .
En fait, on a besoin d'écrire une autre classe de démarrage, au lieu de la valeur par défaut de la plate-forme:
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);
}
}
Dans cette classe, on peut créer une étape JavaFX, l'intégrer dans un JWindow
, et le montrer:
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;
}
D'autres choses à retenir sont:
-
supprime l'affichage de l'écran de NetBeans original en exécutant votre application avec le paramètre
--nosplash
. -
Appelez votre classe d'initialisation personnalisée en exécutant votre application avec le paramètre
-J-Dnetbeans.mainclass=com.package.splash.CustomStartup
-
le lien suggère cette classe personnalisée doit être sur le chemin de classe d'initialisation de la plate-forme, ce qui signifie à l'intérieur du dossier
platform/core
.
Autres conseils
La version actuelle de la classe NetBeans qui est chargé de rendre l'écran d'accueil peut être consulté en ligne ici: org.netbeans.core.startup .
Le code coupable qui empêche le GIF d'animation est cette ligne (ligne 546)
graphics.drawImage(image, 0, 0, null);
Pour que le gif pour animer le ImageObserver
devra préciser au lieu d'être mis à null
puis repeindre doit être appelée lorsque imageUpdate()
est appelée sur le ImageObserver
.
Un exemple d'afficher un fichier GIF animé peut être consulté ici: relation entre Gif animé et Observateur de l'image
Pour autant que je peux vous voir ou devrez modifier le code ci-dessus de la plate-forme NetBeans et le reconstruire pour votre application ou vous devrez créer votre propre écran de démarrage à partir de zéro à utiliser au lieu de NetBeans un.
espère que vous trouverez ce utile!