2017-09-29 37 views
0

Netbeans 플랫폼 위에 응용 프로그램이 내장되어 있으며 모듈 중 하나를로드하는 동안 몇 가지 검사를 수행해야합니다. 확인이 실패하여 사용자는 어떤 일이 일어나야할지 결정할 수 없습니다.모듈 복원 중 대화 상자가 표시되면 java.lang.IllegalStateException이 발생합니다. 스플래시 화면을 사용할 수 없습니다.

https://platform.netbeans.org/tutorials/60/nbm-login.html이 모듈의 설치 프로그램을 생성하고 수표 방법과 대화 상자 표시를 설치자 방법 restore()에 입력했습니다.

public class Installer extends ModuleInstall { 

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

이 작동하지만 폐쇄되는 시작 화면이 발생하고 나중에 거기에 예외를 발생

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) 

나는이 예외를 방지하기 위해 무엇을 할 수 있는가?

+0

DialogDisplayer를 사용하는 대신 JDialog를 열어 보았습니까? 어쩌면 스플래시 화면이 사라질 수 있습니다. – PaL

답변

1

간단한 독립형 모듈에서이 예외를 재현 할 수있었습니다. 이것은 known bug in NetBeans 인 것 같습니다. 가능한 해결 방법은이 코드 예제 에서처럼 주 창이 열릴 때까지 WindowManager.invokeWhenUIReady()를 사용하여 대화 상자 표시를 지연하는 것입니다.

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

그러나 주 창을 열고 표시하기 전에 대화 상자를 표시하고 조치를 취하는 것이면이 대안을 사용할 수 없습니다.