我有一个像这样的代码的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需要重新调用它()。
任何人都可以给我任何想法吗?
由于 杰夫波特
答案 0 :(得分:1)
JavaFX是单线程的,因此您在主线程上执行的任何操作都将阻止重新绘制。如果要在方法运行期间重新绘制,则需要在单独的线程上运行。例如,您可以使用javafx.async.JavaTaskBase。