我試圖從Java應用程序內啓動VideoLAN程序的實例。其中一個我試圖做到這一點的方法如下所示:由運行時運行時的外部程序塊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 start)執行該命令時,當vlc程序到達緩衝階段結束時,它將掛起。如果Java程序中的所有線程都被終止/運行到結束,那麼vlc程序將進入流式處理階段。 java進程在vlc進程關閉之前不會終止,所以這種行爲顯然是進程間某種耦合的結果。
試圖通過將它寫入.cmd文件並執行它來間接執行該命令,但結果相同。
有關如何避免外部過程掛起的任何想法?
您希望在VLC打開的情況下讓Java進程保持運行,還是讓它終止並讓VLC進程繼續運行?我不確定實際上是否有「耦合」發生,因爲這個過程運行在它自己的空間中,但是也許有一些過程控制可以幫助你獲得你想要的結果。 – jheddings 2009-12-05 01:09:20