【问题标题】:JavaFx: Why dose 'Thread.sleep( )' stop UI threads?JavaFx:为什么要使用“Thread.sleep()”停止 UI 线程?
【发布时间】:2015-09-14 08:16:52
【问题描述】:
public void startApp(){
       primaryStage.show();
       new Thread(new Runnable(){
             public void run(){
                  Thread.sleep(20000);//2 seconds

                  //do something.........

                  System.out.println("all things done");
             }
       }).run();
}

我认为primaryStage 将首先显示。但事实上,primaryStage 总是在新线程完成后显示(在打印'all things done' 之后)。如果我删除'Thread.sleep(20000)',primaryStage 也会在'所有事情完成'之后。为什么?我在某个地方错了吗? 先谢谢大家了!

【问题讨论】:

    标签: java multithreading javafx javafx-2 javafx-8


    【解决方案1】:

    primaryStage 总是在新线程完成后显示

    你不是在这里创建一个新线程。您只是在 Runnable 对象上调用 run() 方法。

    您需要使用.start() 而不是.run() 才能在新线程中执行。

    【讨论】:

    • 嗨,我在我的电脑上尝试了这个程序,但它告诉我primaryStage.show()总是先执行。为什么?为什么我的结果与上述情况不同?你能为我们解释一下吗?谢谢!
    • 您的primaryStage.show() 真的是JavaFX Stage#show() 方法吗?哪个显示窗口?还是您只是创建了一个随机的show() 方法并调用它?
    • 干杯!它非常适合我!感谢您的大力帮助!
    • 好的,我明白了,我的方法实际上不是JavaFX Stage show()。谢谢你的帮助!
    • @uestcfei,为了清楚起见,show() 方法将首先被调用(就像任何其他方法一样),但窗口不会显示到最后,因为 EDT 线程是被屏蔽了...
    【解决方案2】:

    Thread.sleep(20000);//2 seconds 20 秒。

    我已经尝试过这段代码,它似乎可以按您的预期工作,所以问题一定出在其他地方。 https://ideone.com/zEjT8Q

    【讨论】:

    • 感谢您的帮助,'Codebender' 解决了我的问题。(Ps:'System.out.println("1")' 不在 UI 线程上。)
    【解决方案3】:

    也许你想要的是这样的:

    public void startApp(){
        primaryStage.show();
        new Thread(new Runnable(){
            @Override
            public void run() {
    
                try {
                    Thread.sleep(20000);//2 seconds
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
                //do something.........
    
                System.out.println("all things done");
    
            }
        }).run();
    }
    

    你需要实现Runnable的方法run()

    【讨论】:

    • 感谢您的帮助。我在我的问题中的代码中犯了一个错误并遗漏了方法签名,我实际上已经覆盖了“运行”方法。
    猜你喜欢
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2016-11-23
    相关资源
    最近更新 更多