【问题标题】:javafx doesnt repaint label till method has finished, why?javafx 在方法完成之前不会重新绘制标签,为什么?
【发布时间】:2010-05-05 20:22:50
【问题描述】:

我有一个 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 更新为“状态:开始读取”,但它没有。只有当 read() 方法返回时才会更新文本。

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

谁能给我一些想法?

谢谢 杰夫·波特

【问题讨论】:

    标签: javafx


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多