2015-02-19 3 views
1

Я написал простую java-программу для вызова командного файла. Проблема в том, что когда я запускаю эту программу Java, ничего не происходит, командный файл не выполняется. Но когда я запускаю одну и ту же программу в режиме отладки, идущей по очереди, тогда пакетный файл запускается.Вызов программы Java перед запуском командного файла

Проблема, которую я подозреваю здесь, это мой JVM, который завершает работу до того, как мой процесс на самом деле заканчивается. Я могу поместить в Thread.sleep(), но я не хочу этого делать. Есть ли другой способ, чтобы мой процесс был завершен, а затем JVM отключается.

public static void main(String[] args) { 

    String batchFilePath = "D:\\MyDir"; 
    String batchFileName = "callMe.bat"; 
    executeBatchFile(batchFilePath, batchFileName); 
} 

public static void executeBatchFile(String filePath, String fileName) { 
    try { 
    List cmdAndArgs = Arrays.asList("cmd", "/c", fileName); 
    ProcessBuilder pb = new ProcessBuilder(cmdAndArgs); 
    pb.directory(new File(filePath)); 
    Process p = pb.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ответ

2

Вы можете использовать waitFor метод ProcessBuilder ждать запущенный процесс до конца. Вот это описание waitFor от Javadocs

Вызывает текущий поток ждать, если это необходимо, до тех пор пока процесс , представленный этим объектом процесса не прекращается. Этот метод немедленно возвращает , если подпроцесс уже завершен. Если подпроцесс еще не завершен, вызывающий поток будет заблокирован до выхода подпроцесса.

+0

thats correct, it works – user85

+0

@usb рад, что это сработало, пожалуйста, примите ответ, чтобы помочь другим, сталкивающимся с тем же вызовом. –

Смежные вопросы