大佬教程收集整理的这篇文章主要介绍了AppleScript 命令在终端中有效,但在 Java 中无效,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的主要问题是如何让下面提到的命令在java中工作,这个命令的主要问题是它不执行我命令它执行的脚本;有人可以帮我让这个苹果脚本在 Java 中工作吗?
我不明白但由于某种原因命令:
osascript -e 'tell application "Terminal" to do script "cd /Users/benjaminsloutsky/eclipse-workspace/stack/Stack/StackProjects/brother/build && cmake .. && cmake --build . && ./cmake-good"'
在终端中执行,但是每当我尝试使用 Runtime.getRuntime().exec() 命令在 java 中运行它时,它根本不执行(它没有向我显示一个新的终端窗口,其中包含正在执行的代码,但是在终端工作)。这个命令的重点是显示一个带有 main.cpp 文件输出的新终端。这是我的java代码:
final String innerCommand =
"cd /Users/benjaminsloutsky/eclipse-workspace/stack/Stack/StackProjects/brother/build && cmake .. && cmake --build . && ./cmake-good";
String[] comm = new String[] {
"/bin/bash","-c","osascript -e 'tell application \"Terminal\" to do script \"" +
innerCommand + "\"'"
};
Runtime.getRuntime().exec(comm);
它不运行。为什么会这样,我该如何解决这个问题,这样我的脚本也可以在 javafx.Js 中运行。这个命令的目的是显示一个新的终端窗口,然后运行一个脚本。
我认为我正在正确运行 comm
变量中列出的多个命令,并且我正在使用运行时执行命令。
先谢谢你!
Runtime.getRuntime().exec()
不是在 Java 中运行和管理外部进程的最佳方式,而是使用 java.lang.ProcessBuilder
更好。
所以你的代码可以像这样用 java.lang.ProcessBuilder
表示。
import java.io.bufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class CommandExecutor {
public static void main(String[] args) {
CommandExecutor executor = new CommandExecutor();
executor.executeInTerminal("cd /Users/benjaminsloutsky/eclipse-workspace/stack/Stack/StackProjects/Brother/build && cmake .. && cmake --build . && ./cmake-good");
}
public void executeInTerminal(String command){
List<String> cms = new ArrayList<>();
cms.add("/bin/sh");
cms.add("-c");
cms.add("osascript -e 'tell application \"Terminal\" to do script \"" + command + "\"'");
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command(cms);
try {
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.geTinputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
Boolean success = process.waitFor(1,TimeUnit.minutES);
// check the status
} catch (IOException | InterruptedException E) {
// do some logging
}
}
}
以上是大佬教程为你收集整理的AppleScript 命令在终端中有效,但在 Java 中无效全部内容,希望文章能够帮你解决AppleScript 命令在终端中有效,但在 Java 中无效所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。