swing是非執行緒安全的,也就是說,如果多個執行緒同時對乙個swing元件進行操作,很可能會引發異常等問題,以至程式崩潰。畢竟,repaint是乙個比較花費時間的操作,如果乙個swing元件在repaint的過程中,其內容被更改,就會導致repaint的內容與修改後的內容不符,可能導致訪問錯誤(比如多執行緒環境下修改乙個list的item項)。
使用swing的時候,有幾個需要注意的地方。首先,當乙個swing窗體被建立並現實的時候,會有乙個叫做「事件分派執行緒」的執行緒被建立,所有的事件處理方法(repaint、actionperformed等等)都是由這個執行緒負責執行的,也就是說,整個swing窗體(包含其中的元件)都是這個執行緒支撐的。
使用swing的幾個規則:
1)如果遇到耗時的或者可能阻塞的事情要去做,就建立乙個執行緒去處理它。比如,檔案io、網路連線、大規模資料處理。不要放在事件分派執行緒中處理,以免導致swing介面不響應。
2)如果乙個處理需要從swing ui中讀取資料,則應該在此方法處理任何具體事情前,將所有資料從ui中讀取完畢,然後再處理。
3)如果你需要等待乙個固定的時間,使用timer而不要讓事件分派執行緒sleep();,因為這裡一sleep,別的事件就沒法處理了。
4)不要在別的執行緒中操作ui,應該設定相應引數,讓事件分派執行緒操作ui,保證只有乙個執行緒操作swing這個執行緒非安全的東西。(swing程式的單一執行緒規則)
還有幾個為數不多的方法是執行緒安全的:
可以在任意的執行緒中新增/刪除事件***。jcomponent的repaint和revalidate方法可以在任意執行緒中呼叫,repaint方法排程乙個重繪事件,revalidate排程乙個布局事件,肯定也會緊接著構件乙個重繪事件。
foreach 一些需要注意的地方
通常迴圈訪問陣列都用for迴圈 例如 for i 0 i i 3 i echo arr i 但通過手工 操作乙個大陣列來說,用foreach迴圈的 更少 上面的 可以這樣寫 foreach arr as value echo value 下面來仔細 下foreach使用中的一些問題 1.foreac...
使用namespace需要注意的一些東西
使用c 標準庫的任何識別符號,一般來說有三種選擇,但是using directive有時候會出現問題。首先using namespace std這種用法並不會導致效能上的變化。而是在程式比較大的時候,會出現意外的名稱衝突。例如使用如下的形式 using namespace a using names...
使用SQL SERVER需要注意的一些細節
養成寫注釋的習慣。比如儲存過程,我們不僅在建立儲存過程的時候寫注釋,而且是以後的開發版本中修改了儲存過程,那麼也要寫注釋。儲存過程不要以sp 開頭,因為系統儲存過程都是以sp 開頭的。而且在執行sp 開關的儲存過程時資料庫引擎首先在master資料庫中查詢這個儲存過程,如果找不到,再去其它資料庫查詢...