0
您好,我已經實現了以下方式調用後面的方法,但仍然在點擊下一個按鈕後,我無法從Close按鈕獲得響應。請指出我的代碼中有錯誤,或者請告訴我,我期望的行爲是否錯誤。swing中的invokeLater方法
public void actionPerformed(ActionEvent e) {
//Some log messgae
if (e.getSource() == btnNext) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
/// some piece of code for some database transaction
}
});
}
我期望在這裏,如果我點擊btnNExt仍然應該能夠關閉它之間的數據庫事務之間的應用程序。這沒有發生?
我在想這裏有什麼問題,或者代碼有問題。
invokeLater將在swing事件線程上執行,並在運行時凍結UI。看起來你的數據庫事務代碼阻止了UI,並且應該在單獨的線程上運行。如果沒有swing代碼,請不要使用invokeLater運行它。 – schmop
使用SwingWorker代替invokeLater作爲您的數據庫代碼 –