2012-08-16 3 views
3

자바 데스크톱 애플리케이션을 만들고 있습니다. "만들기"및 "취소"버튼이 두 개 있습니다. 내가 창을 만들면 보고서가 새 창에 만들어집니다. 내 문제는 "취소"버튼입니다. 사용자가 만들기 단추를 누르면 새 보고서를 만드는 데 약간의 시간이 걸립니다. 취소 버튼은 생성시에만 작동해야합니다. 사용자가 취소 버튼을 누르면 보고서 작성 작업이 중단되어야합니다. 버튼을 생성하고 취소하기 위해 액션 리스너를 추가하지만, 생성 버튼을 클릭하면 취소 버튼을 동시에 클릭 할 수 없습니다.자바 스윙에서 수행 된 작업을 중지하는 방법

답변

2

각 프로세스를 별도의 스레드로 실행 해보십시오. 취소가 작동하지 않는 이유는 생성이 프로세스를 완료하는 데 시간이 걸리기 때문입니다. 그 시간에 메인 스레드를 차지하고 다른 UI 요소가 취할 수있는 모든 작업 (취소 버튼 포함)을 중단합니다.

취소 버튼이 작동하는 것 같습니다. 그러나 클릭 할 때마다 시작 버튼 이벤트에 대한 처리를 위해 시작된 이벤트가 대기열의 후면에 놓입니다. 이벤트 처리를 별도의 스레드에 넣고 두 버튼에 필요한 리소스를 동기화하면 (스레드가 안전하면 해당 이벤트 버튼에 의해 생성 된 스레드를 취소 버튼을 사용하여 쉽게 중지 할 수 있어야합니다.

+0

공식 Javadoc에 따르면 Swing *은 스레드로부터 안전하지 않으므로 * 좋은 방법은 아닙니다. – asteri

+0

별도의 스레드에서 UPDATE하려는 스윙 요소에만 적용됩니다. 별도의 스레드에서 버튼 (또는 대부분의 스윙 UI 요소)을 업데이트하는 것이 안전하지 않을 수 있습니다. 그래서 당신은 옳았습니다. 스레드로부터 안전하지는 않습니다. 질문자는 버튼에 의해 시작되는 이벤트를 중지하기 만하면됩니다. – Perley

0

두 개의 다른 ActionListener을 만드십시오. 하나는 "생성"JButton이고 다른 하나는 "취소"JButton입니다. 이렇게하면 상대방이 처리하는 동안 응답 할 수 있어야합니다.

관련 문제