下面的示例演示了文字(" A"," B"," C"和"正在测试......& #34;)每个this.setState({ result: response.Employees });
和Label
都不会在for()执行时显示。它将同时显示一次()完成!
解决这个问题的任何解决办法?
TextArea
答案 0 :(得分:3)
问题是您正在UI线程上运行密集型操作。
,在完成之前,文本区域无法重绘,因为所有这些都发生在您在UI线程上进行简单的计算通常不是问题,但是你的循环需要80亿次迭代。
避免这种情况的方法是将任何密集型操作推送到另一个线程。有多种方法可以做到这一点,具体取决于您的使用案例。在你的例子中,你的循环并没有真正做任何事情所以你可以简单地用这个替换你的循环:
new Thread( ()->{
// Send the lambda to the Application (UI) thread
Platform.runLater(()->info.appendText("testing in progress...\n"));
for( int i=0; i<800; i++ )
{
for( int x=0; x<10000000; x++ );
}
// Send the lambda to the Application (UI) thread
Platform.runLater(()->info.appendText("end...\n"));
}).start();
这样的Thread
的使用在现代Java中是不受欢迎的,但它证明了这一点。更好的解决方案可能涉及Future
s或ExecutorService
s。