[問題] sleep或wait過程中把code做完?

看板java作者 (蘿莉控)時間12年前 (2012/01/18 00:28), 編輯推噓5(505)
留言10則, 4人參與, 最新討論串1/2 (看更多)
這是我ui介面的import import javax.swing.*; import java.awt.*; 只列出一部份的code import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; switch(r) { case 0: demoui.btn0.setBackground(Color.blue); try {wait(1000); } catch (InterruptedException er) {er.printStackTrace();} demoui.btn0.setBackground(null); try {wait(1000); }catch(InterruptedException e3) {e3.printStackTrace();} demoui.btn0.setBackground(Color.GREEN); demoui.btn0.setEnabled(true);break; case 1: ... .. . } 這段的用意是在按下按鈕之後把某個btn變色後 停留一秒的時間再回無色 再停頓一段時間(1000是臨時設的)後變綠色 這個做法再變成藍色之後eclipse就會顯示出exception 還有一堆unknown source的訊息 會這樣做是因為查到的用法寫說wait如果只給int的話可以只做延遲 如果把wait換成Thread.sleep的話 顏色就會直接跳到綠色 我原本的做法是 Thread.sleep() switch(r) {變色} //藍 Thread.sleep() switch(r) {還原} Thread.sleep() switch(r2) {變色} //綠 但是這種做法變藍色跟還原的部分似乎在sleep的過程中就執行完了 只看到最後的綠色 我以為是thread所以會同時去sleep 於是sleep兩個會一起結束 變藍色的部分太快就根本看不到 但是換成wait也是出現exception 請問我哪個部分做錯了呢? 或是我哪個地方沒有搞懂用法? 希望這不會是個太蠢的問題= =" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.109.98

01/18 00:39, , 1F
01/18 00:39, 1F

01/18 00:41, , 2F
搞不太懂甚麼要扯到 switch?問題點應該跟 switch 無關?
01/18 00:41, 2F

01/18 00:42, , 3F
還有請你寫明是 swing 還是其他東西(說不定是 GWT?)
01/18 00:42, 3F

01/18 00:43, , 4F
不然一樓給的 reference 會很無辜......
01/18 00:43, 4F
抱歉 我接觸java的時間很短 不清楚應該提供怎樣的資訊 (其實C也沒有很好就是了) 這也是我第一次接觸gui介面 是這樣的 會扯到switch是因為我想說如果是因為兩個thread在同樣的層次上才會變成一起執行的話 用switch包起來可能就不會有這種問題了 不過好像沒用Q Q ※ 編輯: efzbadmoon 來自: 111.255.109.98 (01/18 00:51) ※ 編輯: efzbadmoon 來自: 111.255.109.98 (01/18 00:51)

01/18 11:12, , 5F
你用wait(10000); 看看會不會發生什麼事,雖然我沒用過AWT
01/18 11:12, 5F

01/18 11:14, , 6F
但我猜會鎖死沒回應....
01/18 11:14, 6F

01/18 11:17, , 7F
變成藍色之後eclipse就會顯示出exception <= nullpointer?
01/18 11:17, 7F

01/18 13:00, , 8F
說得也是,我都忘記原 po 沒有附錯誤訊息了... 故鎖文
01/18 13:00, 8F

01/18 17:28, , 9F
因為 wait 不是這樣用的, 大概收到的是沒有synchronize
01/18 17:28, 9F

01/18 17:29, , 10F
引起的 exception
01/18 17:29, 10F
文章代碼(AID): #1F5Q6bvx (java)
文章代碼(AID): #1F5Q6bvx (java)