我有一个处理一些数据的 GUI 应用程序,它将文本行转换为对象。创建的每个对象都显示在 JTextPane 或 JTextArea 上。例子:
第 1 行已创建 827401830 第 2 行已创建 827401831
因此,用户被告知该过程。
在幕后,有一个线程在后台运行并完成所有工作。问题是该线程的字段之一是 JTextArea。它看起来像这样:
public class ConsumerThread implements Runnable
{
private ArrayBlockingQueue<TicketExchangeLine> queue;
private JTextArea textArea;
public ExchConsumerThread(ArrayBlockingQueue<TicketExchangeLine> queue, JTextArea textArea)
{
this.queue = queue;
this.textArea = textArea;
}
public void run()
{
try
{
while (true)
{
// check if end of file from producer POV
if (queue.peek()!=null && ...)
break;
MyObject obj = queue.take();
try{
//do the process here
textArea.append("here comes the output for the user..."+obj.getID);
}catch(Exception nfe)
{
//Oops
}
}
textArea.append("\nDone!");
}catch (InterruptedException e)
{
// Oops
}catch(Exception exp)
{
exp.printStackTrace();
}
}
}
所以上面的代码可以正常工作,但有时我不是从 GUI 使用这个线程,然后我无缘无故地实例化一个 JTextArea;更糟糕的是,我必须 system.out 一切才能看到进程。
问题:如何在不使用线程中的 Swing 组件的情况下将所有“处理过的数据”记录到 JTextArea(或有时是 JTextPane)?
谢谢!