在我編寫的應用程序中,我使用Runtime.exec(...)啓動了另一個應用程序(可運行JAR)。一切都在Windows中成功啓動,但Linux(特別是某些CentOS安裝 - 在Ubuntu中工作)一直給我帶來一些問題。出於某種原因,輔助應用程序成功啓動的唯一方式是如果我通過終端執行第一個應用程序。所有行爲都按預期工作。但是,如果通過雙擊其圖標(未打開終端)啓動第一個應用程序,啓動第二個應用程序的按鈕似乎什麼也不做。我沒有得到任何異常或錯誤輸出 - 只是我的進度條閃現,說它正在啓動,然後什麼都沒有。我可以通過jconsole確認第二個應用程序的進程從未啓動。Linux中的運行時執行問題
我已經看到了關於執行方法(http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)的陷阱的常見鏈接文章,但一直沒有能夠用我在那裏找到的任何東西解決這個問題。實際上,我正在讀取第二個進程的輸出和錯誤流,因爲當它成功運行時(通過終端命令啓動第一個應用程序之後),我看到了所有輸出。不知道有關Linux的更深層次的工作,我認爲這聽起來像是輸出流或權限問題,但我不確定。
在情況下,它可以幫助診斷問題,我使用下面的命令: rt.exec(new String[]{"\bin\bash", "-c", "java -jar myjarfile.jar myArg1 myArg2 ..."});
由於該工程(根據不同的應用是如何啓動),我不是太擔心,什麼是錯的這一段代碼。 ..
任何人有任何建議嗎?提前致謝!
編輯:解決方案是修復目錄到我試圖運行的JAR。當通過GUI啓動時,user.dir
指向包含我的應用程序的文件夾的父目錄。由於我使用Eclipse RCP,因此我的解決方案是使用 String currDirPath = Platform.getInstallLocation().getURL().toString();
。感謝大家的幫助!
這仍然可能是stdout/stderr流的問題。嘗試使用'popen'而不是'exec'並捕獲進程的輸出。 – 2012-07-25 11:48:04
爲什麼不嘗試使用ProcessBuilder.start()而不是Runtime.exec()?前者總是可取的。 – 2012-07-25 12:42:48
謝謝,夥計們。我會嘗試更新您的建議。 – FlammableChimp 2012-07-25 12:54:30