2010-05-05 150 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

相关问题