我在饼图中添加了一个面板,其中包含复选框,当选中匹配复选框时,饼图将显示该复选框。问题是当用户双击复选框时,它会抛出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);
}
}
问题是什么?谁是例外的重复孩子?
答案 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
。当你说双击时会发生这种情况,如果你在这里使用线程,它也可能是竞争条件。
希望这有帮助。