2017-06-02 98 views
1

我試圖做打開從我的基於控制檯的Java程序的Emacs編輯器上的特定文件如下:如何打開從Java通過調用Runtime.getRuntime UNIX終端文本編輯器()。EXEC()?

int exitValue = Runtime.getRuntime().exec(commands).waitFor(); 

命令是兩個元素的字符串數組:

commands[0] = "emacs"; 
commands[1] = "/home/test.txt"; // The actual path I'm using is different. 

所以,當我運行這個時,emacs不會打開,而是我的程序繼續運行,並且在exitValue中,執行上面的行(第一個)後得到。我究竟做錯了什麼?

另外,如果我嘗試使用任何VI納米爲了同樣的目的,而不是繼續運行程序只是執行該行後掛在那兒,但既不編輯器實際上是打開。

回答

0

該過程可能發射它的標準錯誤的消息。讀取標準錯誤需要調用Process對象的getErrorStream()方法,並在單獨的線程中讀取返回的InputStream。

聲音相當複雜的,不是嗎?這是的Runtime.exec年前被替換ProcessBuilder的原因之一,這使得過程的輸出更加容易的觀察:

ProcessBuilder builder = new ProcessBuilder("emacs", "/home/test.txt"); 

// Makes Process use Java program’s stdin, stdout and stderr. 
builder.inheritIO(); 

int exitValue = builder.start().waitFor(); 

,不會讓你的指揮工作,但它可以讓你看到什麼出錯了。

+0

這就是我所需要的。謝謝。 –

0

應該是簡單的:離開了xterm的,剛開始六:

Process p = new ProcessBuilder("vi", "/home/test.txt").start(); 

如果你想爲VI的詳細命令行參數,將其添加爲單獨的字符串,而不是裏面的「第一個參數」。

和啓動vi等終端程序自然需要,你開始從可見光端Java應用程序,所以vi有一個終端使用,但我想這是如此。

+0

我實際上不確定你是否在拖釣,通過建議Joe應該使用vi而不是emacs ... – VGR

+0

這沒有什麼區別。它的行爲與以前完全一樣。如果我用vi,它只是在執行這條線後掛在那兒,如果我用emacs,它並沒有真正做任何事情,只是移動到下一個代碼。 –

相關問題