2012-03-24 73 views
0

我正在寫一個簡單的聊天程序,該程序在JTabbedPane的不同選項卡中顯示不同的對話框。我用JTextArea來顯示對話框。我添加了一個JTextArea像這樣的標籤:更新JTabbedPane組件

JTextArea referenceToAppend = new JTextArea(); 
JTabbedPane.addTab(title,new JPanel(new JScrollBar(referenceToAppend))); 

我把基準referenceToAppendList,然後當我需要將文本追加我做 如下:

List.get(index).append(textForAppend); 

的問題是:我的應用程序變得無法響應。我怎麼解決這個問題?我查閱了很多關於論壇的信息,當然還有Oracle。我找不到我需要的東西。也許我是不注意的,或者可能是我不瞭解簡單的事情。如果有人能夠舉一個簡單的例子或者鏈接到另一個討論這個問題的論壇,我將非常感激。

+3

這聽起來像你阻止[* Event Dispatch Thread *](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html)。發佈更多的代碼或[SSCCE](http://sscce.org)將幫助我們爲您提供幫助。 – Jeffrey 2012-03-24 22:25:13

回答

1

看看SwingWorker。它允許您在後臺執行操作,將事件調度線程的報告信息線程化。如果您需要阻止套接字讀取,則需要在後臺線程上執行該操作,以保持UI的響應。

+0

非常感謝Jeffrey和Devon_C_Miller!我對擺動中的單線程模型瞭如指掌,但認爲追加文本的操作不會花費太多時間。但據我所知,問題要深得多 - 我只能在EDT中使用擺動組件。下一個代碼解決了我所有的問題: new SwingWorker(){public Object doInBackGround(){return null} public void done(){JTextArea.append(text)}} .execute();非常感謝 !! – 2012-03-25 08:25:35