Javafx - CheckBox在双击时抛出异常

时间:2017-07-19 15:06:32

标签: java javafx javafx-8

我在饼图中添加了一个面板,其中包含复选框,当选中匹配复选框时,饼图将显示该复选框。问题是当用户双击复选框时,它会抛出IllegalArgumentException:Children:添加了重复的子项

复选框事件的代码:

x

异常堆栈跟踪:

private void valueChecked(CheckBox checkBox, Data checkedData) {
    try {
        if (checkBox.isSelected()) {
            if (!pieChart.getData().contains(checkedData)) {
                pieChart.getData().add(checkedData);
            }
        } else {
            pieChart.getData().remove(checkedData);
        }
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
    }
}

问题是什么?谁是例外的重复孩子?

1 个答案:

答案 0 :(得分:1)

最有可能发生的问题是因为您将两次checkedData的相同实例添加到SceneGraph中。

此代码生成相同的“重复子级”异常:

PieChart pieChart = new PieChart();
Data data = new PieChart.Data("myData", 17.56);     
pieChart.getData().add(data);
pieChart.getData().add(data);

虽然此代码有效:

PieChart pieChart = new PieChart();
Data data1 = new PieChart.Data("myData", 17.11);
Data data2 = new PieChart.Data("myData", 17.11);
pieChart.getData().add(data1);
pieChart.getData().add(data2);

看到区别?

如果没有看到整个代码,很难说为什么会在代码中发生这种情况。所以,也许你的contains检查不起作用。也许您已经在场景图中添加了checkedData。当你说双击时会发生这种情况,如果你在这里使用线程,它也可能是竞争条件。

希望这有帮助。