我对Java很陌生,所以我很抱歉这个初学者的问题。
我有一个JButton,当我点击它时,会触发一些MySQL查询,并且显示器中的一些更新需要2或3秒。在此期间,我的用户界面完全冻结。有没有办法避免这种情况? 也许我应该使用像synchronized,thread或runnable这样的东西,但我不太了解。 有人可以解释一下吗?
非常感谢。
问候。
文森特
答案 0 :(得分: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线程上的所有待处理事件都已处理完毕。阅读javadoc here。