2012-03-24 51 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