2012-02-17 21 views
5

हमारे Maven/Netbeans मंच आवेदन, स्टार्टअप पर एक कस्टम छवि का उपयोग करता हैएनिमेटेड स्पलैश स्क्रीन

NBM-ब्रांडिंग> core.jar> org.netbeans.core.startup> splash.gif की जगह

मैंने इसे एनिमेटेड बनाने की कोशिश की। Gif, लेकिन केवल पहला फ्रेम प्रदर्शित होता है।

कुछ जावाफ़ेक्स विंडो एनीमेशन चलाकर शायद एनिमेटेड स्प्लैश स्क्रीन को लागू करने के बारे में कैसे जाना होगा?

मैं 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; 
} 

अन्य चीजें याद करने के लिए कर रहे हैं:

  • दबाने --nosplash पैरामीटर के साथ अपना ऐप चलाकर मूल नेटबीन स्प्लैश स्क्रीन।

  • -J-Dnetbeans.mainclass=com.package.splash.CustomStartup पैरामीटर

  • link suggests इस कस्टम वर्ग मंच के प्रारंभ classpath पर हो सकता है, platform/core फ़ोल्डर के अंदर अर्थ है के रूप में के साथ अपने ऐप चलाकर अपने कस्टम आरंभीकरण वर्ग पर कॉल करें।

1

स्प्लैश स्क्रीन को प्रस्तुत करने के लिए जिम्मेदार नेटबीन क्लास का वर्तमान संस्करण यहां ऑनलाइन देखा जा सकता है: org.netbeans.core.startup

अपराधी कोड कि animating से gif रोकता चेतन करने के लिए ImageObservernull करने के लिए सेट किया जा रहा करने के बजाय निर्दिष्ट करने की और उसके बाद फिर से रंगना होगा gif के लिए इस लाइन (लाइन 546)

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

आदेश में है imageUpdate() को ImageObserver पर कॉल किया जाना चाहिए।

एक एनिमेटेड GIF प्रदर्शित करने का एक उदाहरण यहां देखी जा सकती है: Relationship Between Animated Gif and Image Observer

तो जहाँ तक मैं यदि आपको उपरोक्त NetBeans मंच कोड बदल सकते हैं और आपके आवेदन के लिए यह पुनर्निर्माण करना होगा देख सकते हैं या आप करना होगा NetBeans के बजाय उपयोग करने के लिए स्क्रैच से अपनी खुद की स्प्लैश स्क्रीन बनाएं।

आशा है कि आपको यह उपयोगी लगेगा!

+0

बहुत उपयोगी! अगर मैं शुरुआत से स्प्लैश स्क्रीन बनाने का फैसला करता हूं, तो मूल नेटबीन के बजाय इसे चलाने के तरीके पर कोई संकेतक? – Marcelo

+0

मुझे यकीन नहीं है। वर्तमान स्प्लैश स्क्रीन क्लास एक सिंगलटन है और यदि केवल यह सेवा लोकेटर पैटर्न का उपयोग करता है तो आप अपनी खुद की स्प्लैश स्क्रीन इंजेक्शन दे सकते थे लेकिन दुर्भाग्यवश यह नहीं है (इसके लिए नेटबीन बग/फीचर अनुरोध लॉग करना फायदेमंद हो सकता है)। लेकिन मुझे पता है कि डिफ़ॉल्ट स्पलैश स्क्रीन को अक्षम करना संभव है, तो आपको यह पता लगाना चाहिए कि अपना खुद का तरीका कब और कब दिखाया जाए। – ughzan