[DevTip] Jfree Chart Data Update Synchronization
응용 프로그램의 thread에서 차트 데이터를 업데이트하고,
UI thread에서 차트 업데이트 하는 것이 일반적.
이 때, 데이터 갱신과 차트 업데이트 thread에서 각각 동일한 데이터 배열에 접근하면서 Boundary 관련 Exception이 발생함
이는 Jfree 뿐 아니라 Swing 자체가 thread-free한 구조가 아니기 때문.
동일한 데이터에 대해 두 개 thread가 동시 접근하지 못하도록!
UI thread에서 차트 업데이트 하는 것이 일반적.
이 때, 데이터 갱신과 차트 업데이트 thread에서 각각 동일한 데이터 배열에 접근하면서 Boundary 관련 Exception이 발생함
이는 Jfree 뿐 아니라 Swing 자체가 thread-free한 구조가 아니기 때문.
동일한 데이터에 대해 두 개 thread가 동시 접근하지 못하도록!
- Java의 synchronize 키워드를 사용
- Method나 데이터 배열에 synchronize 키워드 적용
- Jfree 응용에서는 효과 없음
- SwingUtilities.invokeLater() 함수 사용
- 응용 프로그램 thread에서 SwingUtilities.invokeLater() 함수를 통해 실제 작업을 UI thread가 실행될 때까지 대기시켜 동기화
- 참고 링크: http://alvinalexander.com/java/java-swingutilities-invoke-later-example-edt
- 문제 해결!
댓글
댓글 쓰기