从Java打开一个新的提示/终端窗口

时间:2011-04-21 00:42:21

标签: java terminal

我想打开一个新的终端窗口,它会在打开时运行某个命令。它最好需要是一个真正的本机窗口,我不介意为linux / osx / windows编写不同的代码。

我假设模拟终端可以工作,只要它支持真正的终端所做的一切,而不仅仅是从命令打印输出行。

5 个答案:

答案 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 终端。