Pregunta

Nuestra aplicación Maven/NetBeans Platform utiliza una imagen personalizada en el inicio, reemplazando

NBM-Branding> Core.jar> org.netbeans.core.startup> splash.gif

Intenté hacerlo un .gif animado, pero solo se muestra el primer cuadro.

¿Cómo se podría implementar una pantalla de salpicaduras animada, tal vez ejecutando algunas animaciones de ventana Javafx?

He visto Otra otra pregunta, pero realmente no fue respondido, por favor, tenga en cuenta que estoy preguntando sobre Cómo integrar una pantalla de salpicadura personalizada con mi aplicación NetBeans Platform, y no cómo construirlo realmente.

¿Fue útil?

Solución

Sorprendentemente, descubrí cómo enchufar una pantalla de salpicadura personalizada basada en Esta publicación sobre autenticación y autorización del usuario.

Básicamente, uno necesita escribir otra clase de inicio, en lugar del valor predeterminado de la plataforma:

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

En esa clase, se puede crear una etapa de Javafx, incrustarlo en un JWindow, y muéstralo:

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

Otras cosas para recordar son:

  • Suprima la pantalla original de Splash NetBeans ejecutando su aplicación con el --nosplash parámetro.

  • Llame a su clase de inicialización personalizada ejecutando su aplicación con el -J-Dnetbeans.mainclass=com.package.splash.CustomStartup parámetro

  • Como el el enlace sugiere Esta clase personalizada tiene que estar en la clase de inicialización de la plataforma, lo que significa dentro del platform/core carpeta.

Otros consejos

La versión actual de la clase NetBeans que es responsable de representar la pantalla Splash se puede ver en línea aquí: org.netbeans.core.startup.

El código culpable que evita que el GIF se anime es esta línea (línea 546)

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

Para que el gif anime el ImageObserver tendrá que especificarse en lugar de estar establecido en null y luego la repinte debe llamarse cuando imageUpdate() se llama al ImageObserver.

Aquí se puede ver un ejemplo de mostrar un GIF animado: Relación entre gif animado y observador de imágenes

Por lo que puedo ver, tendrá que cambiar el código de plataforma NetBeans NetBeans anterior y reconstruirlo para su aplicación o tendrá que crear su propia pantalla de salpicaduras desde cero para usar en lugar del NetBeans One.

¡Espero que encuentres esto útil!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top