Sorprendentemente, ho scoperto come collegare una schermata iniziale personalizzata basata su this post about user authentication and authorization.
In sostanza, si ha la necessità di scrivere un'altra classe di start-up, invece di default della piattaforma:
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 quella classe, si può creare una fase di JavaFX, incorporare in un JWindow
, e mostrarlo:
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;
}
Altre cose da ricordare sono:
Sopprimere la schermata iniziale originale di NetBeans eseguendo l'app con il parametro --nosplash
.
Richiamare la classe di inizializzazione personalizzato eseguendo la vostra applicazione con il parametro di -J-Dnetbeans.mainclass=com.package.splash.CustomStartup
Come il link suggests questa classe personalizzata deve essere sul percorso di classe di inizializzazione della piattaforma, il che significa all'interno della cartella platform/core
.
Molto utile! Se decido di creare una schermata iniziale dall'inizio, qualche suggerimento su come eseguirlo invece di quello nativo di NetBeans? – Marcelo
Non ne sono sicuro. L'attuale classe di splash screen è un singleton e, se solo fosse usato il pattern del localizzatore di servizi, avresti potuto iniettare il tuo splash screen, ma sfortunatamente no (potrebbe essere utile registrare una richiesta di bug/funzionalità NetBeans per questo). Ma so che è possibile disabilitare la schermata iniziale predefinita, quindi devi solo capire come e quando mostrare il tuo. – ughzan