Я пытаюсь запустить экземпляр программы VideoLAN из приложения java. Один из способов, я пытался сделать это показано здесь:Внешние блоки программ при запуске Runtime exec
Process p = Runtime.getRuntime().exec("\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" \"http://www.dr.dk/Forms/Published/PlaylistGen.aspx?qid=1316859&odp=true\" :sout=#std{access=udp,mux=ts,dst=127.0.0.1:63928}");
Если я выполнить вышеуказанную команду программа VLC будет запущена, и начнется операция потокового (она проходит через подключения, буферизации и затем потоковые фазы).
Когда команда исполняется Runtime exec (или запуском ProcessBuilder), программа vlc будет зависать, когда она достигнет конца фазы буферизации. Если все потоки в программе java заканчиваются/заканчиваются, программа vlc будет переходить на фазу потоковой передачи. Процесс java не завершится до тех пор, пока процесс vlc не будет закрыт, поэтому это поведение, очевидно, является результатом некоторой связи между процессами.
Попробовали выполнить команду косвенно, записав ее в .cmd-файл, а затем выполнив ее, но результат будет таким же.
Любые идеи о том, как я могу избежать внешнего висячего процесса?
Желаете ли вы оставить процесс Java, работающий с открытым VLC, или завершить его и оставить процесс VLC запущенным? Я не уверен, что на самом деле происходит «соединение», поскольку процесс выполняется в своем собственном пространстве, но, возможно, есть некоторый элемент управления процессом, который поможет вам получить то, что вам нужно. – jheddings