2012-02-17 19 views
5

Nuestra plataforma de aplicaciones/Netbeans experto utiliza una imagen personalizada en el arranque, mediante la sustitución deSplash animado pantalla en la plataforma Netbeans aplicación

NBM-marca> core.jar> org.netbeans.core.startup> splash.gif

He intentado convertirlo en un .gif animado, pero solo se muestra el primer fotograma.

¿Cómo se podría implementar una pantalla de bienvenida animada, tal vez mediante la ejecución de algunas animaciones de ventana JavaFX?

que he visto another other SO question, pero no estaba realmente respondí - Por favor nota que estoy preguntando por cómo integrar una pantalla inicial personalizada con mi solicitud plataforma NetBeans, y no cómo en realidad para construirlo.

Respuesta

2

Sorprendentemente, descubrí cómo conectar una pantalla personalizada basada en this post about user authentication and authorization.

Básicamente, hay que escribir otra clase de puesta en marcha, en lugar de por defecto 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 un escenario JavaFX, incrustarla en un JWindow, y 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; 
} 

Otras cosas a tener en cuenta son:

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

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

  • A medida que el link suggests esta clase personalizada tiene que estar en la ruta de clase de inicialización de la plataforma, es decir, dentro de la carpeta platform/core.

1

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

El código culpable que impide que el gif de animación es esta línea (línea 546)

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

Para que el gif para animar la ImageObserver tendrá que ser especificada en lugar de ser ajustado a null y luego volver a pintar debe llamarse cuando se llama al imageUpdate() en el ImageObserver.

Un ejemplo de mostrar un gif animado se puede ver aquí: Relationship Between Animated Gif and Image Observer

Así que por lo que yo puedo ver que o bien tener que cambiar el código de plataforma NetBeans arriba y reconstruirlo para su aplicación o se tendrá que crea tu propia pantalla de bienvenida desde cero para usarla en lugar de la de NetBeans.

Espero que lo encuentres útil!

+0

Muy útil! Si decido crear una pantalla de bienvenida desde el inicio, ¿hay alguna sugerencia sobre cómo ejecutarla en lugar de la versión nativa de NetBeans? – Marcelo

+0

No estoy seguro. La clase actual de la pantalla de presentación es un singleton y si solo usara el patrón de localización de servicios podría haber inyectado su propia pantalla de bienvenida, pero desafortunadamente no es así (podría valer la pena registrar una solicitud de función/error de NetBeans). Pero sé que es posible deshabilitar la pantalla de bienvenida predeterminada, entonces debes averiguar cómo y cuándo mostrar la tuya. – ughzan

Cuestiones relacionadas