2010-05-05 149 views
0

我有這樣的一些代碼,一個JavaFX應用程序...javafx沒有重繪標籤,直到方法完成,爲什麼?

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

狀態文本被定義是這樣的...

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." 
}; 

我也有一些其他的Javacode即加載數據,多這樣的..

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; 
} 

現在,而最後一種方法是在其長期運行的電話,我希望看到我的狀態文本更新爲具有「狀態:開始讀」,但它沒有。它只有在read()方法返回時才更新文本。

如果它是'直的'java,我會假定長時間運行的作業佔用CPU,或者statusText需要重新調用repaint()。

任何人都可以給我任何想法嗎?

感謝 傑夫·波特

回答

1

JavaFX是單線程的,所以,只要你做的主線程將阻止重新繪製。如果您想在方法運行期間重新繪製,則需要在單獨的線程中運行。例如,你可以使用javafx.async.JavaTaskBase。

+0

謝謝!非常appricated。 – 2010-05-08 06:48:09

相關問題