我正在尝试创建一个运行主类的Jar文件,该主类打开一个新的终端窗口并从该Jar内部运行其他类。
我看到这个讨论“How do I make my java application open a console/terminal window?”而Brandon Barajas的答案正是我所寻找的,但仅限于Windows。我知道如何进行系统检测,但我不能让程序对mac和linux做同样的事情。有人(也许布兰登)可以帮助我吗?
编辑:
我能够使用此命令Runtime.getRuntime().exec(new String[]{"/usr/bin/xterm","-e","java -Dfile.encoding=UTF8 -jar \"" + "/" + filename + "\""+"; bash"});
使其在Linux中运行
打开xterm并发出命令,但我仍然不知道如何使它适用于mac终端。
编辑2:
现在我可以使用打开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);
它什么都不做。
答案 0 :(得分:0)
您只需更改在各种平台上启动java可执行文件所需的命令即可。对于Linux,这已经在这里得到了解答 How to open a command terminal in Linux? 对于mac来说,它会变得相似。
编辑1
链接的答案使用以下参数
String[] cmdArray = {"xterm", "-e", myScript + " ; le_exec"};
r.exec(cmdArray).waitFor();
-e参数很重要。它告诉xterm执行另一个命令。请仔细阅读答案并根据您的需求进行调整,同时考虑&#34 ;; 。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。 Open a new prompt/terminal window from Java
如果你的文件名(包括路径)包含空格,你可能会遇到另一个问题,这个问题已经在这里处理Why does Runtime.exec(String) work for some but not all commands?。我编辑了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});
}
}