gpt4 book ai didi

java - 如何通过 java 代码执行 "java"命令?

转载 作者:行者123 更新时间:2023-12-04 19:08:41 28 4
gpt4 key购买 nike

我正在尝试使用 JADE 运行多代理系统通过代码。
通常,我可以使用以下命令通过命令行运行 Jade 系统:

java jade.Boot -gui
通过更改项目属性并将运行配置指向 jam.Boot 类,它也可以很好地使用 Netbeans IDE。
我的问题是:我想通过java代码运行这个系统......假设,当用户点击一个按钮时,据我所知,上面指定的这个命令应该使用以下代码工作:
Process p=null;                                                                                                                                                     
try {
p = Runtime.getRuntime().exec("java jade.Boot -gui;");
}
catch (IOException ex) {
Logger.getLogger(SimulationCreator.class.getName()).log(Level.SEVERE, null, ex);
}

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
try {
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
} catch (IOException ex) {
Logger.getLogger(SimulationCreator.class.getName()).log(Level.SEVERE, null, ex);
}
但我什么也没得到,JADE 系统都没有运行,我也没有收到任何错误。
我错过了什么?
P.S.:我正在开发 ubuntu 20.0。
P.S.:通过“ps -aux”之类的代码运行其他命令效果很好!

最佳答案

您的问题可能是当前正在运行的 VM 的 PATH 与您使用的 shell(bash 等)和 CLASSPATH 的隐式传递之间的差异。查看which java的java所在的位置在有效的外壳中并尝试在您的 exec 中使用.
此外,您不会在运行时看到所有问题,因为您不会与输出流同时访问错误流,更改为 ProcessBuilder 可以更轻松地调试,因为您可以将输出/错误流重定向到文件。但是如果 JADE 运行很长时间或产生大量输出,您应该在后台线程中使用 STDOUT+ERR。
在 jshell 中试试这个:

String[] cmd = new String[]{"java", "jade.Boot", "-gui"};
ProcessBuilder pb = new ProcessBuilder(cmd);
File fileOut = new File("stdout.log");
File fileErr = new File("stderr.log");
pb.redirectError(fileErr);
pb.redirectOutput(fileOut);
Process p = pb.start();
int rc = p.waitFor();
String stdout = Files.readString(fileOut.toPath());
String stderr = Files.readString(fileErr.toPath());

System.out.println("Exit : "+rc +' '+(rc == 0 ? "OK":"**** ERROR ****"));
System.out.println("STDOUT : "+stdout);
System.out.println("STDERR : "+stderr);

关于java - 如何通过 java 代码执行 "java"命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62553654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com