我正在编写一个在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上做的是什么?
提前致谢!
答案 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
命令。