使用 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();
我正在尝试在 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();