JavaFx:为什么剂量'Thread.sleep()'停止UI线程?

时间:2015-09-14 08:16:53

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

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始终显示。如果我删除'Thread.sleep(20000)',那么在所有事情完成之后,primaryStage也会被删除。为什么?我错了吗? 先谢谢你们所有人!

2 个答案:

答案 0 :(得分:9)

  

primaryStage始终在新主题完成后显示

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

您需要使用.start()代替.run()才能在新主题中执行。

答案 1 :(得分:0)

也许你想要的是这样的:

for (int i = 0; i < results.size(); i++) {
   MyModel model = results.get(i);
   updateChecked(model);
}

您需要实施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(); }

的方法run()