Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java程序在Linux中打开另一个命令行应用程序?_Java_Linux_Command Line Interface - Fatal编程技术网

如何从Java程序在Linux中打开另一个命令行应用程序?

如何从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();

我正在尝试编写一个小型Java命令行应用程序,它将创建一个新文件,然后使用存储在$editor中的系统默认编辑器打开它,然后在编辑器关闭后退出

到目前为止,由于运气不佳,我尝试了以下方法:

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依赖的痛苦。