2012-02-17 1 views
5

Наш специалист/Netbeans платформы приложений использует пользовательское изображение на старте, замениванимированные заставки экрана на приложение Netbeans платформы

Нбм-брендинг> core.jar> org.netbeans.core.startup> splash.gif

Я пробовал сделать его анимированным .gif, но отображается только первый кадр.

Как можно реализовать анимационный заставку, возможно, запустив анимацию окон JavaFX?

Я видел another other SO question, но это на самом деле не отвечал - пожалуйста, обратите внимание, что я спрашиваю о как интегрировать собственную заставку с моим приложением Netbeans платформы, а не так, как на самом деле построить его.

ответ

2

Удивительно, но я узнал, как подключить пользовательский заставку на основе this post about user authentication and authorization.

В принципе, нужно написать еще один класс запуска вверх, а не по умолчанию платформы:

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

В этом классе, можно создать сцену JavaFX, вставить ее в JWindow, и показать:

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

Другие вещи, чтобы помнить, являются:

  • Подавить оригинальный экран заставки NetBeans, запустив приложение с параметром --nosplash.

  • Вызов пользовательского класса инициализации, запустив приложение с параметром -J-Dnetbeans.mainclass=com.package.splash.CustomStartup

  • Как link suggests этот пользовательский класс должен быть на инициализацию платформы классов, а это означает внутри папки platform/core.

1

Текущую версию класса NetBeans, которая несет ответственность за отображение заставки, можно посмотреть здесь: org.netbeans.core.startup.

Виновником код, который предотвращает GIF от анимации этой линии (линия 546)

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

Для того, чтобы GIF, чтобы оживить ImageObserver должно быть определены вместо того, чтобы быть установлены в null, а затем перекрашивать должен быть вызван, когда imageUpdate() вызывается на ImageObserver.

Пример отображения анимированных GIF можно посмотреть здесь: Relationship Between Animated Gif and Image Observer

Так, насколько я могу видеть, вы должны либо изменить код выше платформы NetBeans и восстановить его для вашего приложения, или вы должны создайте свой собственный заставку с нуля для использования вместо NetBeans.

Упование вы считаете это полезным!

+0

Очень полезно! Если я решил создать заставку с самого начала, любые указатели на то, как запустить это вместо собственного NetBeans? – Marcelo

+0

Я не уверен. Текущий класс заставки - это синглтон, и если бы он использовал шаблон локатора службы, вы могли бы ввести свой собственный заставку, но, к сожалению, это не так (может быть полезно зарегистрировать для него ошибку NetBeans/функцию). Но я знаю, что можно отключить экран заставки по умолчанию, тогда вы должны просто выяснить, как и когда показывать свои собственные. – ughzan