2013-06-23 1 views
1

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)이 설정되면 프레임을 닫으면 작업 관리자의 프로세스가 종료되지만 WindowListener를 구현하고 프레임을 수동으로 처리하면 (Process dispose()가 setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)과 같지 않음

new Runnable() { 
    void run() { 
    Jsch tunnel=new Jsch(); 
    JFrame frame=new JFrame(); 
    frame.addWindowListener(new WindowListener() { frame.dispose(); }); // imagine that this is legal 
    frame.setVisible(true); 
    } 
} 

누구나 말해 줄 수

, 어떻게 수동으로 일부 응용 프로그램에 의해 생성 된 프로세스를 종료하기 : 아마 때문에 새의 Runnable() 나는 이런 식으로 뭔가가에 남아있을 것인가?

+0

'아마도 새로운 Runnable()에 다음과 같은 것이 있기 때문일 것입니다 :'- correct. dispose()는 응용 프로그램에서 마지막으로 작성한 윈도우를 삭제하는 경우 프로세스를 종료합니다. 그러나 한 프레임을 닫고 다른 프레임을 열면 Java 작업이 아직 실행 중입니다. '어떤 응용 프로그램에 의해 생성 된 프로세스를 수동으로 종료하는 방법? '- 새로운 프레임 때문에 프로세스가 여전히 실행 중이기 때문에 어떤 일이 일어날 지 확신하지 못합니다. 어쩌면 당신은'ProcessBuilder' 클래스를 사용하여 새로운 프로세스를 시작할 수 있기 때문에 이전 프로세스가 끝날 수 있습니다. 그러나 새로운 프로세스는 내가 추측 할 수있는 작업 관리자에 여전히 나타납니다. – camickr

+0

잠깐, Jsch를 프레임으로 취급합니까 ... 내가 마지막 대답에서 말하는 "새로운 프레임"을 이해하지 못하기 때문에 ... – jovanMeshkov

+0

프로세스 자체에 따라 다릅니다. 예를 들어 스윙 타이머와 같은 것이 있다면 멈추는 가장 좋은 방법은 오버 라이딩 된 'windowClosed method'에서'stop' 메서드를 호출하여'WindowListener'를 사용하는 것입니다. Btw, 개인적으로 나는 항상 기본 닫기 작업으로 DISPOSE_ON_CLOSE를 사용합니다. 물건을 안전하게 만드는 것. –

답변

3

API docs. (JFrame의 정의)

  • EXIT_ON_CLOSE : 시스템 종료 방법을 사용하여 응용 프로그램을 종료합니다. 이 기능은 응용 프로그램에서만 사용하십시오.

따라서 전화를 강제로 종료하려면 System.exit(0);.

모든 최상위 창을 삭제하면 AWT 이벤트 발송 스레드를 종료 할 수 있습니다 (필요한 경우 새로 만들 수 있음). 프로세스에 비 데몬 스레드가 없으면 종료됩니다.

+0

고마워요, 정확히 내가 필요한 것! – jovanMeshkov