我正在尝试通过JTextField
方法更新setText()
文本。但是,当我尝试执行此操作时,似乎没有任何反应。我遍历了调试器,并确定确实如此。 payField
是我正在使用的JTextField
实例。
代码如下:
public void payBill(double payment) {
if((this.bill - payment) > 0)
payField.setText("Bill not completely paid! You still owe " + "$" + (this.bill - payment));
else {
payField.setText("Thank you for choosing Team Turbo!");//Not updating!
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);
}
}
从视觉上看,调用此方法后什么也没发生:
有什么想法吗?整个GUI都在SwingUtilities.invokeLater
线程中运行,仅供说明。
答案 0 :(得分:2)
这个...
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);
高度怀疑。
Swing是单线程API。也就是说,任何长时间运行或阻止的操作都将阻止UI的更新。
在您的情况下,我可能会建议使用Swing Timer
,它会在指定的延迟后触发回调,而不会阻塞UI。
首先查看Concurrency in Swing和How to Use Swing Timers以获得更多详细信息