emacs如何通过运行时从Java打开unix终端文本编辑器。getRuntime()。exec()?
我试图通过执行以下操作,从基于控制台的java程序中使用emacs编辑器打开特定文件:
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中,我会在上面的行(第一行)执行后得到1。我做错了什么
另外,如果我尝试使用vi或nano来达到相同的目的,而不是继续运行程序,那么程序在执行该行后会挂起,但实际上两个编辑器都没有打开
# 1 楼答案
该进程可能正在发出关于其标准错误的消息。读取标准错误需要调用Process对象的getErrorStream()方法,并在单独的线程中读取返回的InputStream
听起来很复杂,不是吗?这就是运行时的原因之一。exec在几年前被ProcessBuilder取代,这使得查看流程的输出更加容易:
这不会让你的命令生效,但会让你看到哪里出了问题
# 2 楼答案
应该很简单:去掉xterm,只需开始vi:
如果您想要vi的更多命令行参数,请将它们作为单独的字符串添加,而不是添加到第一个参数的“”中
启动像vi这样的终端程序自然需要从可视终端启动java应用程序,因此vi有一个终端可供使用,但我认为这是事实