2010-05-05 3 views
0

J'ai une application JavaFX avec un certain code comme ça ...javafx ne repeigne pas l'étiquette tant que la méthode n'est pas terminée, pourquoi?

public class MainListener extends EventListener{ 
    override public function event (arg0 : String) : Void { 
    statusText.content = arg0; 
    } 
} 

statusText est défini comme celui-ci ...

var statusText = Text { 
    x: 30 
    y: stageHeight - 40 
    font: Font { name: "Bitstream Vera Sans Bold" size: 10 } 
    wrappingWidth: 420 
    fill: Color.WHITE 
    textAlignment: TextAlignment.CENTER 
    content: "Status: awaiting DBF file." 
}; 

J'ai aussi un autre Javacode qui est des données de charge, beaucoup comme ça ..

public ArrayList<CustomerRecord> read(EventListener listener) { 

    ArrayList<CustomerRecord> listOfCustomerRecords = new ArrayList<CustomerRecord>(); 
     listener.event("Status: Starting read"); 

     // ** takes a while... 
     List<Map<String, CustomerField>> customerRecords = new Reader(file).readData(listener); 
     // ** long running method over. 

     listener.event("Status: Loaded all customers, count:" + listOfCustomerRecords.size()); 
    return listOfCustomerRecords; 
} 

maintenant, alors que la dernière méthode est dans son appel longue course, je pense voir mon statusText mis à jour pour avoir « Statut: Démarrage lire », mais son ne fonctionne pas. C'est seulement lorsque la méthode read() renvoie que le texte est mis à jour.

S'il s'agissait d'un fichier Java «direct», je supposerais que le travail de longue durée monopolisait le processeur, ou que le statusText avait besoin d'être repaint().

Quelqu'un peut-il me donner des idées?

Merci Jeff Porter

Répondre

1

JavaFX est monothread donc tout ce que vous faites sur le thread principal bloquera repeint. Si vous voulez avoir des repeints lors d'une exécution de méthode, vous devez utiliser un thread séparé. Vous pouvez par exemple utiliser javafx.async.JavaTaskBase pour cela.

+0

merci! beaucoup apprci. –

Questions connexes