2009-11-12 93 views
0

我正在編寫一個在Red Hat Enterprise Linux 5服務器上運行的Java Swing應用程序,我想要啓動jEdit來查看日誌文件。使用Runtime.getRuntime()運行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的罐子/tmp/jEdit/jedit.jar /tmp/test.txt」

如果我複製並粘貼CMD輸出終端窗口,它運行良好。

我已經嘗試了一堆cmd值,但我永遠不能讓jEdit窗口可見。

隨着更改,此過程在Windows上正常工作。

我在Linux上做了什麼?

在此先感謝!

回答

2

由於jEdit是用Java實現的,可能更容易檢查源代碼的方法(在jedit.jar中包含的清單文件中聲明的類中)做什麼,並且執行相同的操作而不使用Runtime.getRuntime().exec()在所有。

如果你確實想要堅持下去,你可以嘗試將單個命令作爲一個數組傳遞給exec(),這通常爲我解決了這樣的問題。

+0

我試着將命令作爲一個數組傳遞,但它不起作用。 – 2009-11-12 21:15:56

1

Linux爲其X-Windows系統使用顯示端口的概念。這允許它爲每個用戶維護不同的桌面環境。它還允許遠程計算機上的用戶從第一臺計算機運行桌面應用程序,但可以看到遠程計算機上的用戶界面。

一次只有一個可用桌面環境的Windows不會。

您絕對必須做的第一件事是將環境變量「DISPLAY = localhost:0」添加到您啓動該環境的環境中。但是,您可能還需要運行「xhost + localhost」,否則可能不允許。

仔細檢查,你沒有成功地啓動一堆現在是殭屍的jEdit進程(使用top),並在必要時殺死它們(使用kill)。

+0

如果我可以運行xclock,這似乎表明顯示器安裝正確嗎? – 2009-11-12 21:16:33

1

Runtime.exec()需要特別注意。接受String的exec方法使用空格字符作爲分隔符將字符串分解爲命令。您需要使用接受String[]的exec方法。閱讀更多here,特別是在底部附近。

+0

我試過了: String [] cmd1 = {「/ bin/sh」,「-c」,「java -jar」,「/tmp/jEdit/jedit.jar」,「/ tmp/test。文本」}; 進程p1 = Runtime.getRuntime()。exec(cmd1); //這不打開jEdit窗口 String [] cmd2 = {「/ bin/sh」,「-c」,「java -jar」,「/tmp/helloWorld.jar」}; Process p2 = Runtime.getRuntime()。exec(cmd2); //這將打印Hello World到屏幕。 我真的認爲這個問題是與顯示器。 – 2009-11-13 13:49:14

+2

你試過String [] cmd1 = {「/ bin/sh」,「-c」,「java -jar /tmp/jEdit/jedit.jar」}? – Nemi 2009-11-15 03:54:11

0

從來就做過一次,我得到了同樣的問題

我所做的就是在命令行中寫入一個文本文件,然後執行該文本文件作爲一個shell腳本文件。 它適合我。

0

Jedit有一個啓動腳本,/usr/bin/jedit我猜。在命令提示符下輸入jedit即可運行,至少在當前版本中爲4.5。嘗試使用該腳本而不是顯式java命令。