Каков правильный способ гарантировать доставку при использовании SwingWorker? Я пытаюсь перенаправить данные из InputStream в JTextArea, и я запускаю SwingWorker с помощью метода execute
. Я думаю, что я следую примеру 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
Вы пробовали запустить его в Swing Dispatcher Thread? Если ваш поток ввода не работает медленно (> 1 с), я бы поместил его в DispatchThread. На самом деле недостаточно кода или контекста для выявления каких-либо проблем. –
Одновременно запускается только один рабочий, и поток ввода будет принимать данные в течение нескольких часов. –