使用Runtime.getRuntime().exec()从Java Swing应用程序启动jEdit

使用Runtime.getRuntime().exec()从Java Swing应用程序启动jEdit,java,swing,netbeans,jedit,Java,Swing,Netbeans,Jedit,我正在编写一个运行在Red Hat Enterprise Linux 5服务器上的Java Swing应用程序,我想启动它来查看日志文件 下面是一些示例代码 public static void main(String[] args) throws IOException, InterruptedException { String cmd = "sh -c \"java -jar /tmp/jEdit/jedit.jar /tmp/test.txt\""; System.o

我正在编写一个运行在Red Hat Enterprise Linux 5服务器上的Java Swing应用程序,我想启动它来查看日志文件

下面是一些示例代码

public static void main(String[] args) throws IOException, InterruptedException {

    String cmd = "sh -c \"java -jar /tmp/jEdit/jedit.jar /tmp/test.txt\"";

    System.out.println(cmd);

    Runtime.getRuntime().exec(cmd);

}
输出为:

sh-c“java-jar/tmp/jEdit/jEdit.jar/tmp/test.txt”

如果我在终端窗口中复制并粘贴cmd输出,它运行良好

我尝试了一系列cmd值,但我无法让jEdit窗口可见

经过更改,此过程在Windows上运行良好

我在Linux上做的事情可能吗


提前谢谢

由于jEdit是用Java实现的,因此可能更容易检查源代码中的
main
方法(在包含在jEdit.jar的清单文件中声明的类中)所做的事情,并且完全不使用
Runtime.getRuntime().exec()


如果您确实想继续使用它,您可以尝试将单个命令作为数组传递给exec(),这对我来说通常可以解决此类问题。

由于jEdit是在Java中实现的,可能更容易检查源代码中的
main
方法(在jEdit.jar中包含的清单文件中声明的类中)完全不使用
Runtime.getRuntime().exec()
执行相同的操作


如果您确实想继续使用它,您可以尝试将单个命令作为数组传递给exec(),这通常可以为我解决此类问题。

Linux在其X-Windows系统中使用显示端口的概念。这允许它为每个用户维护不同的桌面环境。它还允许远程计算机上的用户从第一台计算机运行桌面应用程序,但可以看到远程计算机上的UI

Windows一次只有一个可用的桌面环境,而不是

您必须做的第一件事就是将环境变量“DISPLAY=localhost:0”添加到启动此应用程序的环境中。但是,您可能还需要运行“xhost+localhost”,否则这可能是不允许的


再仔细检查一下,你没有成功地启动一堆现在是僵尸的绝地进程(使用top)并在必要时杀死它们(使用kill)。

Linux在其X-Windows系统中使用了显示端口的概念。这允许它为每个用户维护不同的桌面环境。它还允许远程计算机上的用户从第一台计算机运行桌面应用程序,但可以看到远程计算机上的UI

Windows一次只有一个可用的桌面环境,而不是

您必须做的第一件事就是将环境变量“DISPLAY=localhost:0”添加到启动此应用程序的环境中。但是,您可能还需要运行“xhost+localhost”,否则这可能是不允许的


再次检查,您是否没有成功启动一组现在已成为僵尸的jEdit进程(使用top)并在必要时杀死它们(使用kill)。

Runtime.exec()
需要特别注意。接受
字符串的exec方法使用空格字符作为分隔符,将字符串分解为命令。您需要使用接受
字符串[]
的exec方法。阅读更多内容,尤其是在底部附近。

Runtime.exec()
需要特别注意。接受
字符串的exec方法使用空格字符作为分隔符,将字符串分解为命令。您需要使用接受
字符串[]
的exec方法。阅读更多,尤其是在底部附近。

我做过一次,也遇到了同样的问题

我所做的是将命令行写入文本文件,然后将文本文件作为shell脚本文件执行。
这对我来说很好。

我做过一次,也遇到了同样的问题

我所做的是将命令行写入文本文件,然后将文本文件作为shell脚本文件执行。
这对我来说很好。

杰迪特有一个启动脚本,我想是usr/bin/Jedit
。只需在命令提示符下键入
jedit
即可运行它,至少在当前版本4.5中是这样。请尝试使用该脚本,而不是显式的
java
命令。

杰迪特有一个启动脚本,
/usr/bin/Jedit
。只需在命令提示符下键入
jedit
即可运行它,至少在当前版本4.5中是这样。请尝试使用该脚本而不是显式的
java
命令。

如果我可以运行xclock,这是否表明显示设置正确?如果我可以运行xclock,这是否表明显示设置正确?我尝试过:String[]cmd1={/bin/sh'、“-c”、“java-jar”、“/tmp/jEdit/jEdit.jar”、“/tmp/test.txt”};进程p1=Runtime.getRuntime().exec(cmd1);//这不会打开jEdit窗口字符串[]cmd2={“/bin/sh”、“-c”、“java-jar”、“/tmp/helloWorld.jar”};进程p2=Runtime.getRuntime().exec(cmd2);//这会将Hello World打印到屏幕上。我真的认为问题出在显示上。你试过String[]cmd1={/bin/sh'、“-c”、“java-jar/tmp/jEdit/jEdit.jar”}吗?我试过:String[]cmd1={/bin/sh'、“-c”、“java-jar”、“/tmp/jEdit/jEdit.jar”、“/tmp/test.txt”};进程p1=Runtime.getRuntime().exec(cmd1);//这不会打开jEdit窗口字符串[]cmd2={“/bin/sh”、“-c”、“java-jar”、“/tmp/helloWorld.jar”};进程p2=Runtime.getRuntime().exec(cmd2);//这会将Hello World打印到屏幕上。我真的认为问题出在显示上。您是否尝试过String[]cmd1={”/bin/sh“,“-c”,“java-jar/tmp/jEdit/jEdit.jar”}?