Java 第二次单击图表时出现重复序列错误。如何解决这个问题?

Java 第二次单击图表时出现重复序列错误。如何解决这个问题?,java,javafx,linechart,Java,Javafx,Linechart,我试图在单击按钮时获取图形,但如果我第二次单击按钮,它将引发重复序列异常。有人能帮我吗 提前谢谢 尝试: 1.series.getData().clear() NumberAxis-xaxis=新的NumberAxis(20082018,1); NumberAxis-yaxis=新的NumberAxis(10,80,5); xaxis.setLabel(“年度”); yaxis.setLabel(“价格”); XYChart.Series系列=新的XYChart.Series(); 线形图线形图

我试图在单击按钮时获取图形,但如果我第二次单击按钮,它将引发重复序列异常。有人能帮我吗

提前谢谢

尝试: 1.series.getData().clear()

NumberAxis-xaxis=新的NumberAxis(20082018,1);
NumberAxis-yaxis=新的NumberAxis(10,80,5);
xaxis.setLabel(“年度”);
yaxis.setLabel(“价格”);
XYChart.Series系列=新的XYChart.Series();
线形图线形图=新线形图(xaxis,yaxis);
graph1.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
线形图(X、Y、X轴、Y轴);
}
专用空心线图(ArrayList X、ArrayList Y、NumberAxis xaxis、NumberAxis yaxis){
series.getData().clear();
系列名称(“股票分析”);

对于(int i=0;i您得到的错误是由于第二次将相同的
序列
实例添加到相同的
图表
中引起的。您的方法不考虑序列是否已存在于图表中,因此第二次调用该方法自然会导致“重复序列”错误。调用
Series.getData().clear()
无法解决问题,因为这会清除,而不是。不幸的是,他们将这两个属性命名为相同的东西(即
XYChart#getData()
Series#getData()
),因为这会让人感到困惑

假设您继续使用相同的
系列
实例,则至少有两种可能的解决方案:

  • 折线图
    中删除
    系列
    ,对其进行更新,然后重新添加

    chart.getData().remove(系列);
    //更新系列
    chart.getData().add(series);//副作用:序列移到列表末尾
    
    注意:如果图表已设置动画,则此选项可能不起作用。请参阅和

  • 只要不要将
    系列
    添加到
    折线图
    中(如果已经存在)

    如果(!chart.getData()包含(系列)){
    chart.getData().add(系列);
    }
    
  • 另一种方法是创建并使用新的
    系列
    实例(如果适用)

    另外,调用
    child2.getChildren().add(折线图);
    还应导致在第二次调用您的方法时引发异常。至少在您修复当前问题后会引发异常,因为当前异常停止执行该行。同一
    节点
    不能多次添加到同一
    父节点
    同一问题、不同(ish)上下文中

    您的方法似乎尝试执行太多操作。从概念上讲,您似乎希望该方法更新图表。如果是这样,则无需“重新添加”将
    系列
    添加到图表或将
    折线图
    添加到父级。在初始化所有内容时设置用户界面,然后让该方法根据需要更新数据。这样做意味着您不必使用上述任何一种解决方案;总体而言,这也是一种更好的方法

    还请注意,您正在使用。
    折线图
    系列
    数据
    类都是泛型的,但您没有指定任何类型参数。由于两个轴都是
    数字轴
    ,因此您应该使用:

    • 折线图=新折线图(xAxis,yAxis);
    • Series系列=新系列();
    • series.add(新数据(x.get(i),y.get(i));
      (注意菱形操作符:
    最后,试着跟随,尤其是在发布到公共论坛时

    NumberAxis xaxis = new NumberAxis(2008,2018,1);  
    NumberAxis yaxis = new NumberAxis(10,80,5);
                     xaxis.setLabel("Year");  
                     yaxis.setLabel("Price");
    
    XYChart.Series series = new XYChart.Series();
    
    LineChart linechart = new LineChart(xaxis,yaxis); 
    
    
    graph1.setOnAction(new EventHandler<ActionEvent>() {
                 @Override
                 public void handle(ActionEvent event) {
                     Linechart(X,Y,xaxis,yaxis);
                 }
    
    
    
    private void Linechart(ArrayList <Integer> X, ArrayList<Integer> Y, NumberAxis xaxis, NumberAxis yaxis) {
    
                     series.getData().clear();
    
                     series.setName("Stock Analysis");  
                     for(int i=0;i<=X.size()-1;i++){
                         series.getData().add(new XYChart.Data(X.get(i), Y.get(i)));
                     }
                     linechart.getData().add(series);
                     child2.getChildren().remove(area);
                     child2.getChildren().add(linechart);
    
                 }