我使用JavaFX + FXML与Scala一起构建GUI但是当我使用for循环或映射(Scala集合)时,我在Controller中获取来自FXML文件的所有控件的NullPointerException )。
信息:我在Java中完全编写了完全相同的示例并使用了for-loop并且它工作正常。它只能在Scala中失败。
我构建了一个非常简单的FXML + Controller,因此您可以重现失败(您需要对其中一个循环进行注释以对其进行测试)。
这是我简单的FXML(example.fxml):
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>
<GridPane fx:id="grid" prefHeight="289.0" prefWidth="473.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.Controller2">
</GridPane>
这里是Controller2.scala:
package application
import javafx.fxml.FXML
import javafx.scene.layout.{ GridPane, ColumnConstraints }
import javafx.scene.shape.Rectangle;
class Controller2 {
@FXML private var grid: GridPane = _
@FXML def initialize = {
println(grid)
// doesn't work
for (i <- 0 until 100) {
grid.getColumnConstraints().add(new ColumnConstraints(100));
grid.add(new Rectangle(10, 10), i, 0);
}
// works
var i = 0
while (i < 100) {
grid.getColumnConstraints().add(new ColumnConstraints(100));
grid.add(new Rectangle(10, 10), i, 0);
i = i + 1
}
}
}
对此事的任何见解都将受到高度赞赏