2013-11-21 6 views
0

Я работаю в приложении для качания. У меня есть JFrame с несколькими кнопками и полями.Запуск exe из кода Java

На некоторых событиях нажатия кнопки я открываю exe из текущего каталога. Все работает нормально.

try { 
     Runtime.getRuntime().exec(System.getProperty("user.dir") + 
     "\\Upgrade\\Upgrade.exe"); 
     } catch (IOException ex) { 
     ex.printStacktrace(); 
     } 
    this.dispose(); // disposing my current java file. 

Но что мне нужно, чтобы выход Java-кода после открытия файла EXE.

Кто-нибудь поможет справиться с этим.?

+1

Вы не можете. Если родительский процесс закрывается, будет выполняться и дочерний процесс. – Kayaman

+2

Можете ли вы не просто сделать System.exit (0); – david99world

+0

Как насчет этого? http://stackoverflow.com/questions/287633/java-c-like-fork – Carlo

ответ

0

Вы можете попробовать сделать это процесс, а затем ждет, что процесс завершится перед выходом, например, так:

class SO { 
public static void main(String args[]) { 
try { 
    Process proc = Runtime.getRuntime().exec("your command"); 
    proc.waitFor(); //Wait for it to finish 
    System.exit(0); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
} 
} 
+0

Спасибо .. it работает..! – SanCJ

+0

@SanCJ Рад, что это работает, когда у вас есть шанс, возможно, у меня есть зеленый тик, чтобы показать вопросы как имеющие принятый ответ = D – Levenal

0

Выполнение приложения из Java с помощью Runtime.exec() является источником хорошо известных проблем , Подобно ожиданию завершения процесса, но не потребляя данные из буферов потоков, это верный путь для зависания приложения.

Я бы предложил вам использовать библиотеку, такую ​​как Apache Common Exec, чтобы справиться с этим.

Я работал над проектом некоторое время назад, где мы использовали Runtime.exec(), чтобы запустить процесс, который в конечном итоге будет извлекать файлы поверх существующих файлов. Все работало хорошо, за исключением одной машины, используемой для постановки - она ​​просто зависала. Оказалось, что на этой промежуточной машине кто-то установил дату/время назад, поэтому казалось, что новые файлы были извлечены там, где они были старше существующего, заставляя внешний процесс генерировать предупреждающее сообщение для каждого, переполняя буфер ошибок, наше приложение не потребляло!

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