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

时间:2009-11-12 20:27:40

标签: java swing netbeans jedit

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

以下是一些示例代码。

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上做的是什么?

提前致谢!

5 个答案:

答案 0 :(得分:2)

由于jEdit是用Java实现的,也许更容易检查源代码main方法(在jedit.jar中包含的清单文件中声明的类中)做什么并做同样的事情完全不使用Runtime.getRuntime().exec()

如果您确实想坚持下去,可以尝试将各个命令作为数组传递给exec(),这常常为我解决了这些问题。

答案 1 :(得分:1)

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

Windows,一次只有一个可用的桌面环境,不会。

首先,你必须要做的是将环境变量“DISPLAY = localhost:0”添加到启动它的环境中。但是,您可能还需要运行'xhost + localhost',否则可能不允许这样做。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我曾经做过一次,但我遇到了同样的问题

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

答案 4 :(得分:0)

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