下面的代码段会出现什么问题?
setvbuf(stdout, LINFLEX_0.BDRL.B.DATA0, _IOFBF, 1);
提前感谢您的帮助。
答案 0 :(得分:2)
好像你在UI线程上,因此文本没有更新,因为你和你的其他代码在同一个线程上。
您应该使用Platform.runLater:
FutureTask<Void> updateUITask = new FutureTask(() -> {
lblStatus.setText("Logging out..");
}
Platform.runLater(updateUITask );
答案 1 :(得分:2)
在应用程序线程上使用Thread.sleep
可阻止UI更新。为了防止这种情况,你需要运行代码来等待/关闭不同的线程,并允许应用程序线程继续完成它的工作:
@FXML
private void btnLogOut_Click() {
// update ui
lblStatus.setText("Logging out..");
// delay & exit on other thread
new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
System.exit(0);
}).start();
}
您可能需要考虑使用Platform.exit()
代替System.exit
。
答案 2 :(得分:0)
以下是对我有用的:
@FXML
private Button btnLogOut;
@FXML
private Label lblStatus;
@FXML
private void btnLogOut_Click() throws InterruptedException {
lblStatus.setText("Logging out..");
Thread.sleep(100);
Platform.runLater(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(FXMLMainController.class.getName()).log(Level.SEVERE, null, ex);
}
System.exit(0);
}
});
}