You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX往BorderPane添加ImageView数组元素报重复子节点错误原因?

错误原因分析
  • JavaFX中所有UI组件都属于Node子类,同一个Node实例只能被添加到父容器一次,也不能同时归属多个父容器,这是JavaFX场景图的核心规则。
  • 你的代码仅实例化了1个ImageView对象:
    ImageView img = new ImageView(new Image("sample.png"));
    array[0] = img;
    array[1] = img;
    
    此时数组两个下标指向完全相同的对象实例,后续两次调用add方法相当于重复添加同一个节点到BorderPane,直接触发了你遇到的IllegalArgumentException异常。
修复方案

如果需要显示两张相同的图片,只需创建两个独立的ImageView实例即可,底层的Image资源对象可以被多个ImageView共享,不会额外占用内存:

// 复用同一份图片资源
Image image = new Image("sample.png");
// 创建两个独立的ImageView实例
array[0] = new ImageView(image);
array[1] = new ImageView(image);
// 再分别添加到父容器就不会报错
root.getChildren().add(array[0]);
root.getChildren().add(array[1]);

内容的提问来源于stack exchange,提问作者tommY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:27:01