看板 java 關於我們 聯絡資訊
※ 引述《fasthall (Xen)》之銘言: : 一般來說我在等待時按下取消可以很正常的關閉等待 : 只會因為thread被close而產生例外(可以忽視) : 而下次再按下開始等待時client可以正常連進來 : 但是我發現偶爾我很迅速的按下開始後馬上按下取消 : 會在(註1)這行丟出Address already in use: JVM_Bind例外 這個錯誤訊息的意思是, 指定的 port 已經被使用了, 所以建立 Server Socket 時出現問題。 從你文中敘述看來, 不太可能是其他程序佔用相同的 port, 只可能是目前的這支程式。 然而依序按下開始與取消, 只會建立一次 Server Socket, 實在沒有理由出現這樣的錯誤, 比較合理的解釋是前一次的 ServerSocket 沒有被成功關閉。 這時候就不難猜出問題所在了, 建立新的 thread 並 start 時, 並不會保證立刻開始執行 thread, 而當你按開始並迅速取消時, 取消的 code 執行完了,但 ServerSocket 根本還沒建立, 此時你的 GUI 回到了取消後的狀態,而 ServerSocket 建立後卻依然活著, 到了下一回合按下開始又創出新的 ServerSocket,自然就出現 Error 了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.231 ※ 編輯: tkcn 來自: 140.114.78.231 (08/08 23:47) ※ 編輯: tkcn 來自: 140.114.78.231 (08/08 23:52)
fasthall:真是神奇的bug 難怪我想破頭都想不出來...... 08/09 00:17
LaPass:多執行緒就是這麼神奇..... 08/09 12:37
a1234957:久病成良醫 08/10 22:47