2016-09-12 9 views
0

나 자신에게 약간의 도우미 도구를 프로그래밍했습니다. "Run"과 "Stop"버튼이있는 GUI가 있습니다. "실행"을 누르면 프로그램이 계속해서 루프를 실행합니다 (http 요청 - 몇 시간마다).자바 | "영원히"루프가 실행되는 동안 JFrame을 닫는 방법?

하지만 이제는 "실행"을 누르면 버튼이 눌려져 있고 프로그램/GUI가 프로세스가 끝날 때까지 기다리는 문제가 있습니다. 이 시점에서 나는 창을 닫거나 "Stop"버튼을 누를 수 없다. 프로세스가 영원히 계속 실행되기 때문에 결코 종료 할 수 없습니다. 물론 프로세스 관리자에서 프로세스를 종료 할 수 있습니다.

이 문제를 무시할 수있는 방법이 있습니까?

내가 도움이 대답 ;-) 하나는 추측 수있는 코드없이

+1

forever 루프를 실행하기위한 새 스레드를 시작하십시오. –

+3

EDT (Event Dispatch Thread)를 차단하지 마십시오. 이런 일이 생기면 GUI가 '정지'됩니다. 자세한 내용과 수정 사항은 [Swing의 동시성] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. –

+0

그리고 고마워요! –

답변

2

에 대한 기대, 그러나 당신이 가장 가능성이 버튼을 눌러을 처리하는 방법은 이러한 요청을 실행 즉, 동일한 스레드에있는 모든 실행 .

이 접근법의 문제점은 모든 것이 이벤트 및 기타 UI 작업을 처리하는 스레드 인 이벤트 발송 스레드에서 수행된다는 점입니다. 이 스레드에서 오랜 시간 동안 작업을하면 UI가 응답하지 않게됩니다.

이 문제를 해결하려면 Run 이벤트 처리기에서 모든 작업을 수행하는 스레드를 시작해야합니다. 이로써 EDT는 사용자 상호 작용을 자유롭게 처리 할 수 ​​있습니다.

+0

고마워요, 지금은 잘 작동합니다! 소스 코드가있는 첫 번째 게시물을 편집하는 것이 더 이상 필요하지 않다고 생각합니다 .-) –

+0

@Leeengold : 환영합니다. – npinti