2012-07-06 2 views
1

내 스윙 기반 Java 응용 프로그램에 스윙 응용 프로그램 프레임 워크 JSR (296)을 사용하고 있습니다.스윙 응용 프로그램 프레임 워크에서 창 닫기

AboutBox와 비슷하게 @Action의 사용법을 따라하고 일부 JDialog 클래스를 프로젝트에 추가했습니다.

메인 프레임을 닫으면 내 응용 프로그램이 백그라운드에서 계속 실행됩니다.

protected void configureWindow(java.awt.Window root) { 

    root.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
     // write your code here 
      Application.getInstance(MyApp.class).exit(); 
     } 
    }); 
} 

을하지만이 수정과 나는이 (AboutBox 포함) 대화 상자가, 또한 메인 프레임을 닫 종료 할 때마다 : 는 내 기본 응용 프로그램 클래스의 configureWindow()에 코드를 다음 추가이를 극복합니다.

전체 응용 프로그램이 종료되지 않도록하고 대화 상자를 닫으려면 어떻게해야합니까?

업데이트 : 나는 스윙 응용 프로그램 프레임 워크 프로젝트를 만들 수 있습니다 넷빈즈 IDE 7.01를 사용하고 있습니다. 아래 그림과 같이 이 프로젝트의 골격을 생성

MyApp 
|--myapp 
| |--MyApp.java 
| |--MyAppAboutBox.java 
| |--MyAppView.java 
| 
|--myapp.resources 
    |--MyApp.properties 
    |--MyAppAboutBox.properties 
    |--MyAppView.properties 

넷빈즈 IDE는 창 -> 등록 정보 메뉴에서 작업을 추가 할 수 있습니다.

MyApp 클래스는 내 메인 클래스 인 org.jdesktop.application.SingleFrameApplication을 확장합니다.

MyAppView extends FrameView 내 주요보기입니다.

구현 클래스 javax.swing.JDialogmyapp.view 패키지에 있습니다.

+0

http://www.jroller.com/tackline/entry/closing_dialogs_on_escape를보고 그가 대화를 닫는 방법을 확인하십시오. –

+0

고마워, 내가 여기있는 것 같아, org.jdesktop.application.SingleFrameApplication의 configuerWindow() 구현에 문제가있다. – JoeYo

+0

흠 .. sscce를 보지 않고서는 아무것도 할 수 없다. (참고 : 독립 실행 형 Netbeans에 대한 종속성은 포함하지 않았다. - 주 창을 닫으면 모든 관련/보조 창/대화 상자가 기본적으로 닫히고 수동으로 수행하지 않아야합니다. – kleopatra

답변

3

WindowEvent 클래스에는 닫는 창을 반환하는 getWindow() 메서드 호출이 있습니다.

windowClosing 방법을 사용하면 다음을 확인할 수 있습니다. 응용 프로그램 창이 기본 창인지 확인하십시오. 현재있는 코드를 사용하십시오. 그렇지 않은 경우, 단지 Window.dispose()

편집 전화 : 나는 당신이 당신의 응용 프로그램에서 사용자 정의 대화 상자를 생성 한 통지하지 않았다. 어쩌면 당신은 그들을 처분하는 것을 잊을 수 있습니까?

@Action public void closeAboutBox() { 
    dispose(); 
} 

과 같은 코드를 추가하고 대화 상자를 닫을 때마다이 동작을 호출해야합니다. 이것이 문제가 아니면 스레드 덤프는 주 창을 닫을 때 실행중인 스레드를 확인하는 데 도움이 될 것입니다.

+0

안녕하세요,이 작품. 내 메인 윈도우/뷰/프레임은'JFrame' 인스턴스입니다. 그래서 모든 창을 닫기 위해, 나는'Application.getInstance (MyApp.class) .exit()'를 호출하기 전에 그것이'JFrame'의 인스턴스인지를 확인하고 있습니다. SAF를 사용해야하는 이유는 무엇입니까? 이 프레임 워크는 내가 intrested 인 라이프 사이클을 가지고 있습니다. +1 – JoeYo

+0

기술적으로 올바른 (+1), 단지 앱 프레임 워크의 바람을 따르지 않습니다 :-) – kleopatra

1

실제로 찾고있는 것은 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);입니다. JavaDoc API을보십시오 ...

+0

더 잘 이해할 수 있도록 제 질문을 업데이트했습니다. – JoeYo

관련 문제