2013-01-18 78 views
0

我需要開發Java代碼有JFrame的使用提出了文本和button.Using線程執行操作,我需要爲JFrame.Using另一個線程我的標題欄,每隔一分鐘更新一次當單擊按鈕時,需要在控制檯中顯示文本框的值。我有執行兩種操作(更新每分鐘的時間和獲取文本框值)的代碼,但我不知道如何在同一個類中添加兩個線程。如果有人知道請幫我出使用線程對同一JFrame的

+0

我不確定爲什麼你需要第二個線程,但是你還沒有提供任何示例代碼。我會非常推薦你拋棄你的第一個線程來支持一個javx.swing.Timer,它將在EDT – MadProgrammer

回答

1

你所問的是在Swing做危險的事情。 Swing部件不是thread-safe和應只從Event Dispatching Thread(也被稱爲EDT或Swing線程)更新。爲此,Swing具有實用方法,例如SwingUtilities.invokeLater(Runnable),它將在EDT上執行Runnable中的代碼(在未來某個時間點)。這個想法是,你把你的代碼做Swing的東西(如更新JFrame與當時的名稱)的獨立Runnable內並將其傳遞給invokeLater()

要做到這一點,你可以創建一個匿名的Runnable類:

Runnable updateJFrame = new Runnable() { 
    public void run() { 
     myJFrame.setTitle("My New Title"); 
    } 
}; 

SwingUtilities.invokeLater(updateJFrame); 

使用invokeLater()也保證了部件得到刷新/重繪他們一直在更新後正常。 (您在使用靜態圖時看到的行爲實際上可能是刷新/重繪問題。)此故事的寓意是,如果您在非EDT線程上操作Swing組件,則所有投注都將關閉。

+1

的上下文中調用與其關聯的ActionListener。我建議在Thread上使用javax.swing.Timer表演定期舉辦活動 – MadProgrammer

+0

@mounika什麼爛攤子!請。添加這個東西作爲更新。 –