JFreeChart를 사용하여 시리즈를 수정하는 동안 예기치 않은 오류 발생
문제:
JFreeChart를 동적으로 업데이트하려는 시도 중 플롯에서 사용자에게 "계열 인덱스가 범위를 벗어났습니다" 및 "인덱스가 범위를 벗어났습니다"가 발생했습니다. 백그라운드 스레드 내에서 데이터세트를 변경하려고 할 때 예외가 발생했습니다.
근본 원인:
문제는 데이터세트가 스레드가 아닌 백그라운드 스레드에서 직접 수정되었다는 것입니다. -안전한 작업.
해결 방법:
스레드로부터 안전한 업데이트를 보장하려면 사용자는 스윙워커. 이 클래스는 EDT(이벤트 디스패치 스레드)에서 호출되는 process() 메서드의 데이터세트를 업데이트하여 백그라운드 스레드에서 GUI를 업데이트하는 안전한 방법을 제공합니다.
대체 솔루션:
X축이 시간이 아닌 반복 횟수 또는 횟수를 나타내는 경우 DateAxis 대신 NumberAxis를 사용해야 합니다. 또한 이 변경을 통해 고정된 시간 간격이 아닌 계산이 완료되면 플롯을 업데이트할 수 있습니다.
예제 코드 구현:
private XYSeries series = new XYSeries("Result"); ... @Override protected void process(List<Double> chunks) { for (double d : chunks) { label.setText(df.format(d)); series.add(++n, d); } }
이 코드에서 process() 메서드는 새 데이터가 사용 가능해지면 EDT의 XYSeries 데이터 세트를 안전하게 업데이트하는 데 사용됩니다. XYLineAndShapeRenderer는 첫 번째 시리즈의 모양을 렌더링하여 플롯에 점이 표시되도록 설정되었습니다.
위 내용은 백그라운드 스레드에서 JFreeChart 시리즈를 안전하게 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!