我对Java很陌生,所以很抱歉有这个初学者的问题。
我有一个JButton,当我点击它时,有一些MySQL查询被触发,一些更新显示需要2或3秒。在此期间,我的用户界面完全冻结。有办法避免这种情况吗?也许我应该使用同步,线程或可运行的东西,但我不太明白。谁能给我解释一下?
非常感谢。
致意。文森特
因为你在与用户界面相同的线程上执行查询,该线程在此期间无法接收任何用户命令,因此它"冻结"。
解决方案是启动一个新线程并并行执行查询,然后使用SwingUtilities.invokeLater
之类的东西来更新ui。比如:
// button action listener code
Thread t = new Thread(new Runnable() {
public void run() {
// execute query here
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// update the ui here
}
});
}
});
t.start();
SwingUtilities.invokeLater
有效地将更新操作排队,直到UI线程上所有挂起的事件都被处理完。