Node.getChildren()是否可能不返回所有子项?

时间:2013-11-24 03:56:40

标签: java javafx

我有一个Group子类的实例,我要添加其他组。 其中一个组是一个组的子类,其方法为getCollision()。 在那个方法中,我运行for each周期来检查该组父母的所有孩子:

public Node getCollision() {        
    System.out.printf("Entering get collision %s\n", From.getId());

    for (Node n: this.getParent().getChildren()) {

        System.out.printf("n class: %s id %s\n", n.getClass(), n.getId());

问题是,输出从未提到Group的子类,其中getCollision正在执行,而其他几个Group添加到父类。例如,提到的对象是场景的PointLight,因为它是this.getParent()的子节点,但是缺少其他几个包括getCollision()所有者组。 AmbientLight也不见了。 (还尝试了常规for循环for (int i = 0; i < this.getParent().getChildren().size(); i++),结果完全相同)。 现在我对getChildren()结果中缺少的其他对象有点好,但是在地球上如何调用getCollision,但是在添加之后它的类的对象不在父级的getChildren()中? ??

这是我将它们添加到父级的方式:

final PointLight sunLight = new PointLight(Color.WHITE);
sunLight.setId("point_light");
this.Scape.getChildren().add(sunLight);

final AmbientLight ambLight = new AmbientLight(Color.rgb(50, 50, 50));
ambLight.setId("ambient_light");
this.Scape.getChildren().add(ambLight);

final MyChar person1 = new MyChar();
person1.setId("person1");
this.Scape.getChildren().add(person1);

final MyChar person2 = new MyChar();
person2.setId("person2");
this.Scape.getChildren().add(person2);

...

final BouncingBall bb = new BouncingBall();
bb.setId("bouncing_ball");
this.Scape.getChildren().add(bb);
person2.getBall().Kick(bb, person2.getTranslateX(), person2.getTranslateY(), person2.getTranslateZ()); // Method Kick calls getCollision() in a Timeline

因此,当一个人2踢球时,时间线开始播放并且正在检查是否发生了碰撞。在getCollision()中,我只遇到一些对象,包括上面创建的灯,但不是person1而不是person2。

我的代码都没有任何类型的过滤可以应用于我所知道的getChildren()。没有任何API调用被覆盖,并且除了UI之外没有其他线程。

1 个答案:

答案 0 :(得分:2)

这显然取决于操作系统。最初的问题出现在XP 64bit SP2下,JavaFX 8正式不想支持。在Win7 32bit SP1下执行的相同测试返回了该组的所有孩子。

编辑: 实际上它现在看起来更像是一个32位与64位的问题,因为问题存在于Win7 64位下,但不存在于Win7 32位下。