2017-08-24 17 views
1

私はJavaFXを初めて使いました。問題は、オブジェクトがメソッドを実行するまでUIが更新されないことです。ボタンをクリックすると、GUIが応答しません(タイトルバーの "(Not Responsible)"と表示されます)メソッドが終了すると、UIが更新されます。その後、アップデートやメソッドを実行する他の方法私はこれをどのように修正すればよいがあり続行する前にUIアップデートを確認する方法

Object myObj; 
btn.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
       /* some ui updates */ 
       myLabel.setText("something"); 
      try { 
       /* try initiating object and doing some methods with them */ 
       myObj = new Object(); 
       myObj.doMethod(); 
+0

あなたの 'doMethod()'メソッドは多くの時間を消費しますよね?これはjavafxの問題ではなく、シングルスレッドアプリケーションの問題です。新しいスレッドを作成し、GUIからメインスレッドを使用しないでください。 –

+0

@JoshuaKそれは最大4~5秒かかります。前にUIを変更するメソッドを呼び出すので、前もってUIを更新してから続行する必要があります。 –

+0

'handle'メソッドは同じスレッドで動作します。 'handle'メソッドが終了したときに更新が実行されます。 doMethodメソッドが4〜5秒かかった場合、GUIはこれらの時間の後に更新されます。通常の動作です。 –

答えて

1

あなたは時間のかかる方法のための新しいスレッドを作成する必要があります。?? を(私もラムダを使用してコードを書き換えています式... Java8スタイル;))

Object myObj; 
btn.setOnAction((ActionEvent event)->{ 
    /* some ui updates */ 
    myLabel.setText("something"); 
    try { 
     /* try initiating object and doing some methods with them */ 
     Runnable timeConsumingTask =()-> { 
      myObj = new Object(); 
      myObj.doMethod(); 
     } 
     Thread thread = new Thread(timeConsumingTask); 
     thread.start(); 
+0

ありがとう!私はまったく新しいクラスを作りました! –

関連する問題