실행을 계속하기 전에 EDT가 GUI를 업데이트 할 때까지 기다려야하는 작업자 스레드가 있습니다. EDT에게 무언가를 바꾸라고 말하기 위해 게시 방법을 사용했습니다. 그 변화가 일어나기를 노동자가 기다리게하려면 어떻게해야합니까? 그것은 또한 GUI 변경을 시작한다 당신 같은 작업자 스레드의 경우EDT를 기다리는 자바 스윙 작업자 스레드
답변
후 그 변경이 될 때까지 대기를위한 준비가 내장 된 메커니즘이있다 :
SwingUtilities.invokeAndWait()
멋지게 법안에 맞게해야한다.
또 다른 대안은 SwingUtilities.invokeLater()을 사용하여 EDT에 실행 코드를 지정하면 EDT가 유휴 상태가되면 (즉,이 작업을 실행할 때) 스레드를 깨울 수 있습니다. 이것은 바로 을 발사하고 wait()
다음에 wait()
을하기 전에 EDI로부터의 깨우기가 일어나지 않기를 바랄 것입니다. 타이밍과 관련해서는 이것이 절대적으로 안전하지는 않습니다.
결과를 게시하는 데 SwingWorker를 사용한다고 가정합니다. 부울 플래그를 사용하여 값이 처리되었음을 나타낼 수 있습니다. 이 플래그는 중간 결과를 게시하기 전에 지워진 다음 설정 될 때까지 스레드를 차단하는 데 사용됩니다. UI 스레드는 게시 된 데이터 처리가 완료되면 플래그를 설정합니다.
class MyWorker extends SwingWorker<K,V>
{
boolean processed = true;
protected void doInBackground() {
for (;;) {
setProcessed(false);
publish(results);
waitProcessed(true);
}
}
synchronized void waitProcessed(boolean b) {
while (processed!=b) {
wait();
}
// catch interrupted exception etc.
}
synchronized void setProcessed(boolean b) {
processed = b;
notifyAll();
}
protected void process(List<V> results) {
doStuff();
setProcessed(true);
}
}
답변 해 주셔서 감사합니다. 나는 Carl Smotricz의 방법을 선택했다. 내 상황에서 더 의미가 있었고 나는 invokeAndWait에 대해 완전히 잊어 버렸다. 그러나 당신이 제안한 방법은 여전히 잘 알고 있습니다. – Mihaela
- 1. 자바 스윙 작업자 구현 문제
- 2. 자바 스윙. 다른 Jframes를 기다리는 방법
- 3. 스윙 작업자 모달 대화 상자가 닫히지 않습니다.
- 4. EDT를 차단하지 않고 EDT에서 개체 생성을 기다리는 방법?
- 5. Android의 작업자 스레드
- 6. 디스패처 및 작업자 스레드
- 7. 정상적으로 작업자 스레드 종료
- 8. MFC의 작업자 스레드
- 9. 작업자 스레드 활용 극대화
- 10. MFC에서 작업자 스레드 종료
- 11. winforms에서 작업자 스레드 취소
- 12. 작업자 스레드 및 Dipose()
- 13. 리눅스의 작업자 스레드
- 14. 작업자 스레드 CPU 바운드
- 15. 스윙 및 핸들링 스레드
- 16. 스윙 스레드 콜백
- 17. 자바에서 스레드 시작을 기다리는 방법
- 18. C# 1.1 : 작업자 스레드 모니터링
- 19. 수동으로 IntentService 작업자 스레드 종료
- 20. java : 작업자 스레드 모니터링을위한 패턴?
- 21. 하나의 리더 스레드, 하나의 작성자 스레드, n 개의 작업자 스레드
- 22. 미생물 - 자바 스윙 도구
- 23. Silverlight : 사용자 피드백을 기다리는 동안 스레드 중지
- 24. 작업자 스레드의 주 스레드 콜백 함수를 호출하십시오.
- 25. 다중 스윙 이벤트 발송 스레드
- 26. 스윙과 자바에서는 "스윙 셸"스레드
- 27. 자바 스레드 - 스윙 이벤트 파견 스레드의 영구 루프
- 28. 자바 스윙 : 이벤트 디스 패칭 스레드 VS 스톱워치
- 29. 자바 스윙 콤보 박스
- 30. 실생활 자바 스윙 프로젝트
'일시 중지'버튼을 의미합니까? – trashgod
시도하고 싶은 정말 나쁜 것 같습니다. –