簡體   English   中英

如何讓我的 jar 文件打開一個終端窗口來運行其他類?

[英]How do I make my jar file open a terminal window to run other class?

我正在嘗試制作一個 Jar 文件,該文件運行一個主類,該類打開一個新的終端窗口並從該 Jar 內部運行其他類。

我看到了這個討論“ 如何讓我的 Java 應用程序打開控制台/終端窗口? ”布蘭登巴拉哈斯的回答正是我想要的,但僅適用於 Windows。 我知道如何進行系統檢測,但我不能讓程序為 mac 和 linux 做同樣的事情。 有人(也許是布蘭登)可以幫助我嗎?

編輯:

我能夠使用這個命令Runtime.getRuntime().exec(new String[]{"/usr/bin/xterm","-e","java -Dfile.encoding=UTF8 -jar \\"" + "/" + filename + "\\""+"; bash"}); 打開 xterm 並發出命令,但我仍然不知道如何使其適用於 mac 終端。

編輯2:

現在我可以使用Runtime.getRuntime().exec("/usr/bin/open -a Terminal /usr/bin/java");打開 mac 終端Runtime.getRuntime().exec("/usr/bin/open -a Terminal /usr/bin/java"); 但它仍然不會接受參數來運行我的程序。 它只打開終端,運行 java 並退出。 如果我嘗試使用Runtime.getRuntime().exec("/usr/bin/open -a Terminal /usr/bin/java -jar" + filename); 它什么都不做。

您只需更改在各種平台上啟動 java 可執行文件所需的命令。 對於 Linux,這里已經回答了如何在 Linux 中打開命令終端? 對於 mac,它將是相似的。

編輯 1

鏈接的答案使用以下參數

String[] cmdArray = {"xterm", "-e", myScript + " ; le_exec"};
r.exec(cmdArray).waitFor();

-e 參數很重要。 它告訴 xterm 執行另一個命令。 請仔細閱讀答案並根據您的需要進行調整,也關於“; le_exec”。 如果 xterm 沒有打開,請檢查路徑和權限是否正確。

編輯 2/3對於 mac,這里已經回答了這個問題Open a new prompt/terminal window from Java

Runtime.getRuntime().exec("/usr/bin/open", "-a", "Terminal", "/usr/bin/java", "-jar", filename);

在您的情況下,可執行文件是 java。 從 Java 打開一個新的提示/終端窗口

如果您的文件名(包括路徑)包含空格,您可能會遇到一個不同的問題,這里已經解決了為什么 Runtime.exec(String) 對某些但不是所有命令有效? . 我編輯了 mac 的命令行以使用單獨的字符串作為參數。 你可以試試看是否有效?

編輯 4:

或者,您可以將命令“/usr/bin/java - jar 'your.jar'”寫入腳本文件,使其可執行並執行。

import java.io.IOException;
import java.io.PrintWriter;

public class TestClass {
    public static void main(String[] args) throws IOException {
        String jarFileName = "someJar.jar";
        String scriptFileName = "/tmp/script.sh";

        PrintWriter writer = new PrintWriter(scriptFileName, "UTF-8");
        writer.println("#!/usr/bin/env bash");
        writer.println("/usr/bin/java - jar '" + jarFileName + "'");
        writer.close();
        Runtime.getRuntime().exec("chmod u+x " + scriptFileName);
        Runtime.getRuntime().exec(new String[] {"/usr/bin/open", "-a", "Terminal", scriptFileName});
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM