微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有 javafx.fxml.Initializable 的替代方案来在场景开始时运行代码?

如何解决是否有 javafx.fxml.Initializable 的替代方案来在场景开始时运行代码?

主要目标是在加载场景时运行代码,我知道 Initializable 是推荐的解决方案,我一直在使用它,但我遇到的问题是它不利于集成测试。

我的 initialize 方法中的逻辑依赖于以前的场景,所以当我只加载这个屏幕时,我得到了一些 NullPointer 异常,因为一些我期望存在的东西不存在。

我无法模拟任何这些,因为使用 TestFX,初始化方法在设置的第一行 FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml")); 上运行。

从那里开始,我会执行 loader.getController(); 来访问生成的控制器并模拟某些类字段和内容,但问题是我无法在 initialize 方法运行之前执行此操作。这是一个 catch 22 情况,因为要访问控制器 javafx.fxml.FXMLLoader 必须运行,但是当它运行时它会自动执行 initialize 方法,否则我需要模拟部分或生成预期信息。

那么,我有哪些选择?有没有办法在没有 Initializable 的情况下在场景开始时运行代码

public class GameScreenController implements Initializable {

    private AppService appService;

    private PlayerService playerService;

    private DirectionService directionService;

    private RoomDirectionService roomDirectionService;

    @FXML
    private javafx.scene.control.Button closeButton;

    @FXML
    private Label goldamount;

    @FXML
    private ImageView player;

    private final BooleanProperty wpressed = new SimpleBooleanProperty(false);
    private final BooleanProperty apressed = new SimpleBooleanProperty(false);
    private final BooleanProperty spressed = new SimpleBooleanProperty(false);
    private final BooleanProperty dpressed = new SimpleBooleanProperty(false);

    @Override
    public void initialize(URL url,ResourceBundle resourceBundle) {
        this.appService = new AppService();
        this.directionService = new DirectionService();
        this.roomDirectionService = new RoomDirectionService(this.directionService);
        this.goldamount.setText(String.valueOf(this.appService.getPlayerState().getGoldamount()));
        this.playerService = new PlayerService(this.player,this.appService,this.roomDirectionService);
        this.playerService.moveX(this.appService.getPlayerState().getSpawnCoordinates()[0]);
        this.playerService.moveY(this.appService.getPlayerState().getSpawnCoordinates()[1]);
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。