javafx没有重新标记标签,直到方法完成,为什么?

时间:2010-05-05 20:22:50

标签: javafx

我有一个像这样的代码的JavaFX应用程序......

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

statusText定义如下......

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

现在,当最后一个方法处于长时间运行状态时,我希望看到我的statusText更新为“Status:Starting read”,但它没有。只有当read()方法返回文本更新时才会这样。

如果它是'直的'java,我会假设长时间运行的作业正在占用CPU,或者statusText需要重新调用它()。

任何人都可以给我任何想法吗?

由于 杰夫波特

1 个答案:

答案 0 :(得分:1)

JavaFX是单线程的,因此您在主线程上执行的任何操作都将阻止重新绘制。如果要在方法运行期间重新绘制,则需要在单独的线程上运行。例如,您可以使用javafx.async.JavaTaskBase。