Frage

Unsere Plattformanwendung von Maven/Netbeans verwendet ein benutzerdefiniertes Bild beim Start, indem Sie ersetzt

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

Ich habe versucht, es zu einem animierten .gif zu machen, aber nur der erste Frame wird angezeigt.

Wie würde man möglicherweise einen animierten Begrüßungsbildschirm implementieren, vielleicht wenn man einige Javafx -Fensteranimationen ausführt?

Ich habe gesehen eine andere andere Frage, aber es wurde nicht wirklich beantwortet - bitte beachten Sie, dass ich frage, dass ich frage So integrieren Sie einen benutzerdefinierten Begrüßungsbildschirm in meine Netbeans -Plattformanwendung, und nicht, wie man es tatsächlich baut.

War es hilfreich?

Lösung

Überraschenderweise fand ich heraus, wie man einen benutzerdefinierten Begrüßungsbildschirm basierte Dieser Beitrag zur Benutzerauthentifizierung und Autorisierung.

Grundsätzlich muss man eine weitere Startklasse anstelle der Standardeinstellung der Plattform schreiben:

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 dieser Klasse kann man eine Javafx -Stufe erstellen, sie in a einbetten JWindow, und zeig es:

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;
}

Andere Dinge, an die man sich erinnern sollte, sind:

  • Unterdrücken Sie den originalen Netbeans -Scheinbildschirm, indem Sie Ihre App mit dem ausführen --nosplash Parameter.

  • Rufen Sie Ihre benutzerdefinierte Initialisierungsklasse an, indem Sie Ihre App mit dem ausführen -J-Dnetbeans.mainclass=com.package.splash.CustomStartup Parameter

  • Als die Link schlägt vor Diese benutzerdefinierte Klasse muss sich auf dem Initialisierungsklassenpath der Plattform befinden, was bedeutet, dass in der platform/core Mappe.

Andere Tipps

Die aktuelle Version der Netbeans -Klasse, die für die Rendern des Begrüßungsbildschirms verantwortlich ist, kann hier online angezeigt werden: org.netbeans.core.startup.

Der Schuldige Code, der das GIF am Animieren verhindert, ist diese Zeile (Zeile 546)

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

Damit das GIF die animieren kann ImageObserver muss angegeben werden, anstatt auf festgelegt zu werden null und dann muss Repaint aufgerufen werden, wenn imageUpdate() wird auf die aufgerufen ImageObserver.

Ein Beispiel für die Anzeige eines animierten GIF kann hier angezeigt werden: Beziehung zwischen animiertem GIF und Bildbeobachter

Soweit ich sehen kann, müssen Sie entweder den oben genannten Netbeans -Plattformcode ändern und ihn für Ihre Anwendung wieder aufbauen, oder Sie müssen Ihren eigenen Begrüßungsbildschirm von Grund auf neu erstellen, um sie anstelle der Netbeans zu verwenden.

Ich hoffe, Sie finden das nützlich!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top