Я разрабатываю сетевое приложение, в котором есть JVM клиента и сервера, оба из которых должны зависеть от набора идентичных jar-файлов, которые могут храниться или не храниться в одном и том же месте.Сразу после подключения к Серверу Клиент сравнивает суммы MD5 своих jar-файлов с jar-файлами на сервере.Если суммы MD5 не совпадают, Клиент загружает файлы JAR Сервера в новую папку и пытается создать новый Process
, который не зависит ни от одного из файлов JAR, которые использует Клиент, и завершается.Этот новый Process
затем должен перезаписать банки клиента с копиями с сервера, которые клиент сохранил в новой папке, упомянутой выше, а затем завершиться.
Проблема заключается в том, что каждый раз, когда клиент пытается запуститьновый процесс, JVM Клиента завершает работу без вывода сообщений.Вот код, который порождает новый Process
:
System.err.println("##### creating ProcessBuilder ...");
ProcessBuilder pb = new ProcessBuilder();
System.err.println("##### setting command line args ...");
pb.command("java","-jar","some-jar-not-used-by-the-client.jar");
System.err.print("##### starting ProcessBuilder: ");
for(String opt : pb.command()) System.err.print(opt+" ");
System.err.println();
pb.start();
System.err.println("##### Process started, exiting host process ...");
Клиент, кажется, завершает работу при вызове на pb.start()
.Вот вывод консоли моей программы:
##### creating ProcessBuilder
##### setting command line args
##### starting ProcessBuilder: java -jar some-jar-not-used-by-the-client.jar
Оператор print после pb.start()
никогда не вызывается.Я проверял это как в Java 6, так и в Java 7, и я также пытался использовать Runtime.getRuntime().exec()
, но безрезультатно.Кто-нибудь видел что-нибудь подобное раньше?