2017-05-10 12 views
0

私は単純なログインウィンドウを持っています。ログイン要求を送信するとJFXSpinner(ローダのようなもの)を表示したいと思います。そのために、私はJFXSpinnerオブジェクトを作成していますが、最初は目に見えない(可視値をfalseに設定しています)ユーザーがLOGINボタンをクリックすると、リクエストを送信する前にスピナーを表示し、 。 問題は次のとおりです。JFXSpinnerを表示できません。誰でも私を助けてくれる?JFXでのJFXSpinnerの可視性を更新できません

これは私のログインMethodeの

//loader : is my JFXSpinner object 
public void login(ActionEvent event) 
{ 
    Task task = new javafx.concurrent.Task<Void>() 
    { 
      @Override 
      protected Void call() throws Exception 
      { 
       loader.setVisible(true); 
       if(Compte.login(username.getText(), password.getText())) 
       { 
        System.err.println("It's okey"); 
       } 
       else 
       { 
        //TODO 
       } 
       loader.setVisible(false); 
       return null; 
      } 

      @Override 
      protected void succeeded() 
      { 
       loader.setVisible(false); 
      } 

      @Override 
      protected void failed() 
      { 
       loader.setVisible(false); 
      } 
    }; 
    Thread thread = new Thread(task, "My Task"); 
    thread.setDaemon(true); 
    thread.start(); 
} 
+0

は、あなたのスピナーが最初に表示されていないか、それはそののsetVisibleプロパティを使用した後に表示されていません。

代わりに、あなたは、タスクを開始する直前に、FXのアプリケーションスレッドからの呼び出しを行う必要がありますか? – user55924

答えて

0

であるあなたは、タスクのcall()方法で

loader.setVisible(true); 

を呼び出すようにしようとすると何が起こるかであるバックグラウンドスレッドからUIを変更することはできません。

public void login(ActionEvent event) { 
    Task task = new javafx.concurrent.Task<Void>() { 

     @Override 
     protected Void call() throws Exception { 
      if(Compte.login(username.getText(), password.getText())) { 
       System.err.println("It's okey"); 
      } else { 
       //TODO 
      } 
      return null; 
     } 

     @Override 
     protected void succeeded() { 
      loader.setVisible(false); 
     } 

     @Override 
     protected void failed() { 
      loader.setVisible(false); 
     } 

    }; 
    Thread thread = new Thread(task, "My Task"); 
    thread.setDaemon(true); 
    loader.setVisible(true); 
    thread.start(); 
} 
+1

警告:コードには他にも問題があるかもしれません。たとえば、 'loader'が定義されている、またはシーングラフに追加されている場所ではなく、このメソッドを投稿しただけです。 –

関連する問題