От известно време разглеждам 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() чака процеса, на екрана няма нищо. Просто искам нещо, което да показва на потребителя, че даден процес все още работи. мисли? Благодаря!