JFreeChart를 사용하여 시리즈를 변경할 때 발생하는 무작위 오류
소개
이 질문은 발생한 문제를 탐색합니다. JFreeChart 그래프에서 계열을 동적으로 업데이트하려고 시도하는 중입니다. 원래 구현으로 인해 예외가 발생하고 데이터가 잘못 표시되었습니다.
문제
제공된 코드는 스레드 내의 데이터 시리즈를 수정하는 것을 목표로 했지만 "시리즈 인덱스 아웃"이 발생했습니다. 범위" 및 "범위를 벗어난 인덱스" 예외. 그래프 표시도 오작동했습니다. 이러한 오류의 원인은 잘못된 동기화와 DateAxis의 부적절한 사용 때문입니다.
해결 방법
올바른 접근 방식은 process() 메서드에서 데이터 세트를 업데이트하는 것입니다. 스윙워커. 또한 도메인에는 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); } }
토론
SwingWorker를 사용하면 적절한 동기화가 보장되고 작업자 내에서 데이터 세트가 안전하게 업데이트될 수 있습니다. 실. X축은 기간이 아닌 반복 횟수를 나타내기 때문에 NumberAxis가 도메인에 적합합니다.
대체 접근 방식
대체 접근 방식은 DynamicTimeSeriesCollection을 사용하는 것입니다. . 그러나 이 방법은 X축 영역이 기간이 아닌 반복을 기반으로 하고, 정기적인 간격이 아닌 계산이 완료될 때 업데이트가 필요한 경우에는 적합하지 않습니다.
추가 참고사항
제공된 코드 조각은 Y축에 계산 진행 상황을 표시하는 선형 차트를 생성합니다. X축은 반복 횟수를 나타냅니다. 계산이 진행됨에 따라 차트가 동적으로 업데이트됩니다.
위 내용은 JFreeChart 시리즈를 업데이트하면 '범위를 벗어난 인덱스' 예외가 동적으로 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!