2012-12-03 5 views
3

JFrame을 사용하여 간단한 프로그램을 만들 때 setVisible 메서드가 true 인 순간부터 프레임과 관련하여 프로그램이 종료되지 않습니다. 누군가 내가 흐름을 설명 할 수 있습니까? 감사합니다Java JFrame 및 프로그램 흐름

+0

코드 샘플을 제공 할 수 있습니까? –

+1

[daemon threads] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.8)가 있습니까? – trashgod

+0

@trashgod 좋은 질문입니다. –

답변

3

myJFrame.setVisible(true)으로 전화하면이 스레드와 모든 비 데몬 스레드가 종료 될 때까지 프로그램이 종료되지 않도록 비 데몬 스윙 이벤트 스레드가 만들어집니다. 당신이 JFrame의 닫을 때 종료 할 수있는 프로그램을 원하는 경우 JFrame의가 열려있을 때, 나는이 프로그램이 보이지 않는 경우에도 JFrame의를 업데이트하는 것 같은 일을 할 수 있다는 것을 알고

myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
3

를 호출합니다 다시 표시되는지 확인하고 화면 업데이트가 필요한지 확인하십시오. JFrame을 닫을 때 프로그램을 닫으려면 다음을 사용할 수 있습니다. JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 가시성을 검사하는 스레드를 업데이트하지 않고 JFrame이 보이지 않을 때 프로그램을 중지합니다.

+0

* "그냥 프로그램을 멈 춥니 다."*이 경우 다른 모든 실행중인 스레드와 함께 VM을 종료한다는 의미입니다. 그렇다면 그렇습니다. –

2

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)이 누락 되었습니까?

여기에서 frame은 프레임 이름과 동일합니다.

1

setDefaultCloseOperation(int)에 대한 문서에서.

다음과 같은 선택 사항 중 하나를 지정해야합니다

  • DO_NOTHING_ON_CLOSE (WindowConstants에 정의) : 아무것도하지 마십시오 프로그램이 WindowListener 오브젝트의 windowClosing 메소드에서 조작을 처리하도록 요구하십시오.
  • HIDE_ON_CLOSE (..) : 등록 된 WindowListener 개체를 호출 한 후 프레임을 자동으로 숨 깁니다.
  • DISPOSE_ON_CLOSE (..) : 등록 된 WindowListener 개체를 호출 한 후 프레임을 자동으로 숨기고 처분합니다.
  • EXIT_ON_CLOSE (..) : 시스템 종료 방법을 사용하여 응용 프로그램을 종료하십시오. 이 기능은 응용 프로그램에서만 사용하십시오.

일반적으로 마지막보다 좋기 때문에 제 3 번째 라이트를 선택하십시오. 그 이유는 두 가지입니다.

  1. this example과 같이 여러 프레임 인스턴스를 열고 처분 할 수 있습니다.
  2. JVM이 마지막 프레임을 닫을 때 종료하지 않는 유일한 이유는 다른 비 데몬 스레드가 실행 중이기 때문입니다. 이것은 차례로, 그들이 제대로 종료되어야한다는 신호입니다. 이 문맥에서 'System.exit(n)으로 가상 시스템을 죽이는'은 '제대로'구성되지 않습니다.