使用SwingWorker時,保證傳送的正確方法是什麼?我試圖將數據從InputStream路由到JTextArea,並使用execute
方法運行我的SwingWorker。我認爲我遵循here的示例,但是我得到的結果是亂碼,重複的和一般的廢話。Swingworker生產重複的輸出/輸出不按順序?
這裏是我的非工作的SwingWorker:從輸入流中讀取後
class InputStreamOutputWorker extends SwingWorker<List<String>,String> {
private InputStream is;
private JTextArea output;
public InputStreamOutputWorker(InputStream is, JTextArea output) {
this.is = is;
this.output = output;
}
@Override
protected List<String> doInBackground() throws Exception {
byte[] data = new byte[4 * 1024];
int len = 0;
while ((len = is.read(data)) > 0) {
String line = new String(data).trim();
publish(line);
}
return null;
}
@Override
protected void process(List<String> chunks)
{
for(String s : chunks)
{
output.append(s + "\n");
}
}
}
您是否一次運行多個工人? – TofuBeer 2010-04-25 00:52:38
你有沒有試過在Swing Dispatcher Thread中運行它? 除非你的輸入流很慢(> 1秒),那麼我會把它放在DispatchThread中。 沒有足夠的代碼或上下文來識別任何問題。 – 2010-04-25 01:00:53
一次只能運行一個工作人員,並且輸入流將持續數小時的數據。 – 2010-04-25 01:15:37