作者mrker (ꬮ....)
看板java
標題[問題] JButton的setEnable不work
時間Tue Mar 19 01:30:07 2013
最近在寫UI的時候發生很無法理解的狀況
this.execute_jBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
execute_jBtn.setEnable(false);
doSomething(); // 處理某些事情
execute_jBtn.setEnable(true);
}
});
當execute_jBtn被按下時,我預期他會先disable,然後做某些事,最後再啟用
可是事實上按下時按鍵並不會disable
如果把doSomething()拿掉似乎就可以....
再來,如果actionPerformed裡面new一個執行緒去做,似乎就可以
this.execute_jBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread() {
@Override
public void run() {
execute_jBtn.setEnable(false);
doSomething(); // 處理某些事情
execute_jBtn.setEnable(true);
}
}.start();
};
});
這對我來說真的有點像靈異事件,因為網路抓了幾個Test Case也是這種寫法
可以work,同樣的code我中間加上doSomething()就不work
action listener不是包在Swing的執行緒裡面嗎?應該也沒有dispatch的問題才是阿 = =
而且我確定這個JButton沒有其他的事件處理
因為我有先getListeners() 再for-loop removeListener()避免事件被吃掉
真是怪...
懇請版上高手解答!! 謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.204.217
推 PsMonkey:==.==== 重點是你的 doSomething() 到底是 do what? 03/19 01:51
→ tkcn:為什麼這會是重點?應該就只是某種花時間的操作吧 03/19 01:55
推 PsMonkey:doSomething() 拿掉就正常→這有點反直覺阿 @_@ 03/19 02:07
→ mrker:可能就是撈資料庫之類的動作但沒有額外操作Ul的行為 03/19 02:51
推 PsMonkey:果然 AWT = All Week Tool [完全誤] 03/19 07:03