2015-09-14 2 views
1
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 также после «все сделано». Зачем? Я где-то ошибаюсь? Спасибо всем, кто первым!JavaFx: зачем дозировать «Thread.sleep()» остановить потоки пользовательского интерфейса?

ответ

9

primaryStage всегда показывает после новой нити закончил

Вы НЕ создаете новый читайте здесь. Вы просто вызываете метод run() для объекта Runnable.

Вам необходимо использовать .start() вместо .run() для его выполнения в новой ветке.

+0

Привет, Я пробую эту программу на своем компьютере, но это показывает мне, что '' 'primaryStage.show()' '' всегда выполняется первым. Почему? Почему мой результат отличается от ситуации выше? Вы можете объяснить это нам? Благодаря! – uestcfei

+0

Является ли ваш 'primaryStage.show()' фактически методом JavaFX 'Stage # show()'? Что отображает окно? Или вы просто создали случайный метод 'show()' и назвали его? – Codebender

+0

Приветствия! Это отлично работает для меня! спасибо за большую помощь! –

1

Thread.sleep(20000);//2 seconds Это 20 секунд.

Я пробовал этот код и, похоже, работает так, как вы ожидали, поэтому проблема должна быть где-то в другом месте. https://ideone.com/zEjT8Q

+0

Благодарим за помощь. «Codebender» решил мою проблему. (Ps: «System.out.println (« 1 »)» не относится к теме пользовательского интерфейса.) –

0

Может быть, что вы хотите, как это:

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() из Runnable

+0

Спасибо за помощь. Я сделал ошибку в коде в моих вопросах и оставил подпись метода, я фактически переопределял метод «запустить». –

Смежные вопросы