Я некоторое время просматривал SO и google для ответа на этот вопрос, но я не могу найти тот, который действительно работает. Начну с самого начала:
Я создал класс Java с методом, который запускает пакетный файл в фоновом режиме (окно команд не появляется). Программа отлично работает, за исключением того, что это может немного сбить с толку конечного пользователя, поскольку для завершения пакетного файла требуется некоторое время - пользователь не будет знать, запущена программа или нет. После завершения выполнения пакетного сценария появляется диалоговое окно с сообщением о завершении, но в течение периода времени между запуском метода и появлением диалогового окна программа выглядит так, как будто программа ничего не делает.
Итак, вот мой вопрос: я бы очень хотел отобразить новый кадр с текстовой областью, которая показывает вывод пакетного файла. Однако я понимаю, что это очень сложно сделать без создания временных файлов, записи в них, чтения из них и так далее. Я бы предпочел избежать этого, если это возможно. Поэтому я решил, что может быть лучше отображать неопределенный JProgressBar во время выполнения процесса и закрывать его, когда процесс завершен. К сожалению, я не думаю, что Swing справится с этим, поскольку для этого потребуется одновременно запустить несколько процессов. Я слышал о SwingWorker, но не совсем уверен, как его использовать в данном случае. У меня есть следующий SSCCE, который работает, но не имеет индикатора выполнения.
public myClass(){
public static void main(String[] args){
String[] commands = {"cmd.exe", "/C", "C:\\users\\....\\myBat.bat"};
Process p = Runtime.getRuntime().exec(commands);
p.waitFor()
JOptionPane.showMessageDialog(null, "Process finished!");
}
}
Пока p.waitFor() ожидает процесса, на экране ничего нет. Я просто хочу, чтобы что-то показывало пользователю, что процесс все еще выполняется. Мысли? Спасибо!