Вам потребуется запустить отдельный поток, чтобы запустить процесс. Код, который вы используете для его запуска, в основном можно просто вставить в метод потока (или Runnable
) run()
как есть, но чтобы установить текст в JLabel, вы должны использовать что-то вроде этого:
...
while ((line = input.readLine()) != null) {
SwingUtilities.invokeLater(new SetTextRunnable(jLabel1, line));
}
...
class SetTextRunnable implements Runnable {
private String line;
private JLabel jLabel1
public SetTextRunnable(JLabel jLabel1, String line) {
this.jLabel1 = jLabel1;
this.line = line;
}
public void run() {
jLabel1.setText(line);
}
}
РЕДАКТИРОВАТЬ : только что заметил: очевидно, класс SwingWorker
предназначен для такого рода вещей, так что это еще один вариант для вас (если он существует в вашей версии Java).
ИЗМЕНИТЬ РЕДАКТИРОВАТЬ : так глупо, я не заметил, что SwingWorker
уже упоминалось в другом ответе.