ok questo sembra funzionare abbastanza bene:
codice:
public class StartYDL implements Runnable {
protected final JTextArea textArea;
protected Reader reader = null;
public StartYDL(JTextArea textArea) {
this.textArea = textArea;
}
public void commence(Process p) {
InputStream in = p.getInputStream();
reader = new InputStreamReader(in);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
StringBuilder sb = new StringBuilder();
try {
while (reader != null) {
int c = reader.read();
if (c == -1) {
return;
}
sb.append((char) c);
setText(sb.toString());
}
} catch (IOException ex) {
sb.append("\n\nERROR:\n").append(ex.toString());
setText(sb.toString());
} finally {
try {
reader.close();
} catch (IOException ex) {
sb.append(ex.getMessage());
}
}
}
private void setText(final String text) {
EventQueue.invokeLater(() -> {
textArea.setText(text);
});
}
}
usando una JTextArea.