避免在JButton操作后冻结



我对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线程上所有挂起的事件都被处理完。

最新更新