2017-09-29 5 views
0

Ich habe Anwendung auf Netbeans Platform gebaut und ich muss einige Prüfungen während des Ladens eines der Module und ein Dialogfeld, wenn einige der check lässt den Benutzer nicht entscheiden, was passieren soll.Anzeige Dialog während der Wiederherstellung des Moduls verursacht java.lang.IllegalStateException: keine Splash-Screen verfügbar

Insipired von diesem Tutorial https://platform.netbeans.org/tutorials/60/nbm-login.html Ich erstellte Installer für das Modul und legte die Überprüfungen und die Dialoganzeige auf die Installer-Methode restore().

public class Installer extends ModuleInstall { 

    @Override 
    public void restored() { 
     if (check()) { 
      DialogDisplayer.getDefault().notify(myDialogDescriptor); 
      //... 
     } 
    } 

Dies funktioniert aber bewirkt, dass der Splash-Screen geschlossen und es später zu tritt eine Ausnahme

java.lang.IllegalStateException: no splash screen available 
at java.awt.SplashScreen.checkVisible(SplashScreen.java:197) 
at java.awt.SplashScreen.update(SplashScreen.java:324) 
at org.netbeans.core.startup.Splash$SplashPainter.repaint(Splash.java:401) 
at org.netbeans.core.startup.Splash$SplashPainter$1.run(Splash.java:442) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

Was kann ich tun, um diese Ausnahme zu verhindern?

+0

Haben Sie versucht, einen JDialog anstelle von DialogDisplayer zu öffnen. Vielleicht führt das dazu, dass der Begrüßungsbildschirm verschwindet. – PaL

Antwort

1

Ich konnte diese Ausnahme in einem einfachen eigenständigen Modul reproduzieren. Dies scheint ein known bug in NetBeans zu sein. Eine mögliche Umgehung ist die Verwendung von WindowManager.invokeWhenUIReady(), um die Anzeige des Dialogfelds zu verzögern, bis das Hauptfenster wie in diesem Codebeispiel geöffnet wird.

public class Installer extends ModuleInstall { 

@Override 
public void restored() { 
    WindowManager.getDefault().invokeWhenUIReady(new Runnable() { 
     @Override 
     public void run() { 
      NotifyDescriptor.Confirmation dd = new NotifyDescriptor.Confirmation("Do you want to proceed?"); 
      Object result = DialogDisplayer.getDefault().notify(dd); 
      if (result == DialogDescriptor.OK_OPTION) { 
       // Do something 
      } 
     } 
    }); 
} 

Aber diese Problemumgehung nicht akzeptabel sein kann, wenn Ihre Anforderung, den Dialog anzuzeigen und Maßnahmen zu ergreifen, bevor das Hauptfenster öffnet und angezeigt wird.

Verwandte Themen