使用 ProcessBuilder 打开 -n

open -n with ProcessBuilder

我正在尝试在 MacOS 中使用 Java 打开一个应用程序,使用以下命令使用 ProcessBuilder:

ProcessBuilder process = new ProcessBuilder("open -n /Applications/Utilities/Terminal.app");
        try {
            process.start();
        } catch (IOException ex) {
            logger.debug("IOException: {}", ex);
            SdkException.notify(ex.getClass().getName(), ex, getClass(), Severity.ERROR);
        }

它不会启动应用程序,但它会在我 运行 和 Runtime.getRuntime().exec

时启动
try{
    Process p = Runtime.getRuntime().exec("open -n /Applications/Utilities/Terminal.app");
} catch (IOException ex){
    logger.debug("IOException: {}", ex);
}

如何使它与 ProcessBuilder 一起工作?

将命令参数拆分为单独的字符串。而不是

ProcessBuilder process = new ProcessBuilder("open -n /Applications/Utilities/Terminal.app");

使用

ProcessBuilder process = new ProcessBuilder("open", "-n", "/Applications/Utilities/Terminal.app");

Mac 中终端的正确路径是 "/System/Applications/Utilities/Terminal.app"

但是你最好在线程中打开。

像这样:

new Thread(new Runnable() {
    public void run() {
        String[] params = { "open", "/System/Applications/Utilities/Terminal.app" };
        try {
            new ProcessBuilder(params).start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();