使用SwingWorker时保证交付的正确方法是什么?我正在尝试将数据从InputStream路由到JTextArea,并且我正在使用execute
方法运行我的SwingWorker。我想我正在关注示例here,但我的结果,副本和一般的废话都没有了。
这是我的非工作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");
}
}
}
答案 0 :(得分:1)
创建字符串时需要使用'len'值:
String line = new String(data,0,len).trim();
另外,我建议你将InputStream包装在BufferedReader中并使用'readLine()'方法:
BufferedReader reader = new BufferedReader(is);
...
String line = reader.readLine()
答案 1 :(得分:-1)
从输入流中读取后清除数据数组。
while ((len = is.read(data)) > 0) {
String line = new String(data).trim();
publish(line);
Arrays.fill(data,(byte)0);
}