2017-07-26 5 views
0

J'ai un projet Javafx avec un navigateur à l'intérieur. J'utilise angularJS dans un navigateur. Lorsque j'essaie d'accéder à un nouvel état à partir d'un thread d'arrière-plan, la vue ne le fait pas jusqu'à ce que j'interagisse avec l'un des boutons. Donc le code angulaire est appelé mais la vue est figée jusqu'à cliquer sur quelque chose.Mise à jour du navigateur javaFX Contenu à partir du fil d'arrière-plan

Task task = new Task<Void>() { 
     @Override public Void call() { 
      while (true) { 
       try { 
        System.out.println("sLEEPING"); 
        Thread.sleep(4000); 
        System.out.println("Reloading page"); 
        Platform.runLater(() -> { 
         communicator.changeUI(); 

        }); 
        System.out.println("pAGE Reloaded"); 

       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    Thread t = new Thread(task); 
    t.start(); 

Répondre

1

Ne pas mettre à jour l'état de l'interface utilisateur à partir d'un fil d'arrière-plan (voir la section « Threading » dans le documentation). Envelopper le code qui modifie réellement l'interface utilisateur dans Platform.runLater() (ou utiliser un Task et un gestionnaire onSucceeded).

.: par exemple

// Runs in some background thread: 
public class MyRunnable { 

    @Override 
    public void run() { 
     // long-running code here... 

     // to update UI: 
     Platform.runLater(() -> { 
      // update UI here... 
     }); 
    } 
} 
+0

j'ai ajouté mon code, je me sers Platform.runLater() mais la vue est toujours en attente d'un clic. Je pensais peut-être que je dois dire au navigateur de faire une sorte de rafraîchissement? pas de rechargement réel –