首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >避免不在FX应用程序线程上导致UI崩溃

避免不在FX应用程序线程上导致UI崩溃
EN

Stack Overflow用户
提问于 2018-10-18 06:47:48
回答 1查看 171关注 0票数 0

我正在用JavaFX做一个基于步骤的游戏,我正在使用do while循环来等待用户输入。问题是,它是从fxml控制器初始化方法调用的,这意味着接口永远不会加载。解决方案是使用另一个线程等待,但JavaFX不允许从辅助线程修改任何节点。

我使用下面的代码避免了“不在FX应用程序线程上”:

代码语言:javascript
复制
public void initialize(URL arg0, ResourceBundle arg1) {
        // I call the game engine to start the game sequence and I pass root into it for further use
        engine = new GameEngine(root);

        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                engine.start();
            }
          });
    }

在engine.start()方法中:

代码语言:javascript
复制
public void start() {
        System.out.println("Game started");
        text("Hello, stranger"); // a new Label inside VBox
        do {
            try {
                Thread.sleep((long) 1000);
                System.out.println("Sleeping...");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("Error... waiting?");
            }
        } while(this.listener == false); // Listener triggers when user inputs.

        System.out.println("ENTER PRESSED, May proceed");
        text("It worked!");
    }

另外,GameEngine扩展了线程,我不知道它对多线程有什么影响。

当代码启动时,UI崩溃,输出进入休眠状态...每一秒都应该如此。

EN

回答 1

Stack Overflow用户

发布于 2018-10-20 00:45:46

基本上,使用多线程必须是明智的。当主线程编辑布局时,一个线程等待。推杆

代码语言:javascript
复制
Platform.runLater(() -> {
  // layout manipulations 
});

如果在主线程之外,布局操作将按预期工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档