我想打开一个新的终端窗口,它会在打开时运行某个命令。它最好需要是一个真正的本机窗口,我不介意为linux / osx / windows编写不同的代码。
我假设模拟终端可以工作,只要它支持真正的终端所做的一切,而不仅仅是从命令打印输出行。
答案 0 :(得分:13)
这会有用吗?
// windows only
Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe");
p.waitFor();
答案 1 :(得分:11)
打开一个实际的终端窗口肯定需要为每个操作系统提供不同的代码。对于Mac,您需要以下内容:
Runtime.getRuntime().exec("/usr/bin/open -a Terminal /path/to/the/executable");
答案 2 :(得分:5)
我在Ubuntu(X11桌面)10.04~14.04和其他Debian发行版上使用过这个。工作良好;但是,您可以考虑使用Java的 ProcessBuilder 。
// GNU/Linux -- example Runtime.getRuntime().exec("/usr/bin/x-terminal-emulator --disable-factory -e cat README.txt"); // --disable-factory Do not register with the activation nameserver, do not re-use an active terminal // -e Execute the argument to this option inside the terminal.
答案 3 :(得分:3)
您需要有关正在运行的操作系统的信息。为此你可以使用这样的代码:
public static void main(String[] args)
{
String nameOS = "os.name";
String versionOS = "os.version";
String architectureOS = "os.arch";
System.out.println("\n The information about OS");
System.out.println("\nName of the OS: " +
System.getProperty(nameOS));
System.out.println("Version of the OS: " +
System.getProperty(versionOS));
System.out.println("Architecture of THe OS: " +
System.getProperty(architectureOS));
}
然后对于每个操作系统,您必须使用Bala R和Mike Baranczak所描述的不同调用
答案 4 :(得分:0)
为了让 Java 使用 Windows taskkill,试试这个:
try {
// start notepad before running this app
Process p1 = Runtime.getRuntime().exec("cmd /c start cmd.exe"); // launch terminal first
p1.waitFor();
Process p2 = Runtime.getRuntime().exec( "taskkill /F /IM notepad.exe" ); // now send taskkill command
p2.waitFor();
Process p3 = Runtime.getRuntime().exec( "taskkill /F /IM cmd.exe" ); // finally, close terminal
p3.waitFor();
} catch (IOException ex) {
System.out.println(ex);
} catch (InterruptedException ex) {
Logger.getLogger(RT2_JFrame.class.getName()).log(Level.SEVERE, null, ex);
} // close try-catch-catch
在 taskkill 工作之前,您需要运行 cmd 终端。