如何从Java程序在Linux中打开另一个命令行应用程序?
我正在尝试编写一个小型Java命令行应用程序,它将创建一个新文件,然后使用存储在$editor中的系统默认编辑器打开它,然后在编辑器关闭后退出 到目前为止,由于运气不佳,我尝试了以下方法:如何从Java程序在Linux中打开另一个命令行应用程序?,java,linux,command-line-interface,Java,Linux,Command Line Interface,我正在尝试编写一个小型Java命令行应用程序,它将创建一个新文件,然后使用存储在$editor中的系统默认编辑器打开它,然后在编辑器关闭后退出 到目前为止,由于运气不佳,我尝试了以下方法: Desktop dt = Desktop.getDesktop(); dt.edit(file); 这个方法导致了一个不支持操作异常,这在某种程度上是有意义的,因为我是从终端运行我的程序,而不是从桌面运行Java应用程序 现在,我有这个: Runtime rt = Runtime.getRuntime();
Desktop dt = Desktop.getDesktop();
dt.edit(file);
这个方法导致了一个不支持操作异常
,这在某种程度上是有意义的,因为我是从终端运行我的程序,而不是从桌面运行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
执行时,将重定向到父进程(请参阅)
在Java7中,您应该能够使用来传递文件句柄。(免责声明:我还没有尝试过,YMMV。)我希望找到一个Java 6解决方案,但看起来Java 7是实现这一目标的必要条件。@grimetime:如果您仍停留在Java 6上,您可以使用JNI在本机代码中执行
fork()
。当然,然后您必须处理引入特定于平台的JNI依赖的痛苦。