簡體   English   中英

如何從Java程序在Linux中打開另一個命令行應用程序?

[英]How can I open another command line application in Linux from a Java program?

我正在嘗試編寫一個小的Java命令行應用程序,該應用程序將創建一個新文件,然后使用存儲在$ EDITOR中的系統默認編輯器將其打開,然后在關閉該編輯器后退出。

到目前為止,沒有運氣,我嘗試了以下操作:

Desktop dt = Desktop.getDesktop();
dt.edit(file);

此方法導致UnsupportedOperationException ,這在我從終端運行程序而不是從桌面運行Java應用程序時是有意義的。

現在,我有這個:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(commandString); // "vim newfile"
proc.waitFor();

可行的,但不是我需要的。 當我跑步

ps a | grep vim

我可以看到它確實在后台運行,並帶有我給它的文件名:

1000 pts/1    S+     0:00 vim 2014-07-16.23-02

關於如何使其在前台運行的任何想法?

像許多交互式程序一樣,vim希望其stdin是可以向其發送ioctl調用的真實終端。 但是,當通過Runtime.exec()執行時,會將stdin重定向到父進程( 有關更多信息,請參見ProcessJavadoc )。

在Java 7中,您應該能夠使用ProcessBuilder.inheritIO()傳遞文件句柄。 (免責聲明:YMMV,我還沒有嘗試過。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM