【发布时间】:2020-10-20 09:33:43
【问题描述】:
目前,当有方法调用时,我正在尝试读取程序的控制台输出。它的工作原理是,我的 Java 程序调用 JNI 包装器来调用 C++ 方法调用。我的 C++ 正在使用std::cout。 payload.invoke 将调用我的 c++ 库 API。在 c++ API 中有一些 cout 语句。这就是我想在 Java 中将其作为变量读取的语句。
目前PrintStream只支持out, print, println and printf。每次有方法调用时,命令提示符都会打印出一堆日志。现在,我希望我的 java 程序能够读取我的 C++ 打印出来的那些输出。
这是我当前的 Java 代码:
public void execute() {
try {
Matcher m = Pattern.compile("([^()]*)[(]([^()]*)[)]").matcher(getPayloadString());
m.find();
boolean passed;
if (m.group(2).isEmpty()) {
// this is where it invoke the method
passed = (boolean) payload.invoke(testcase);
System.out.println("Boolean is: " + passed + "\n");
}else {
passed = (boolean) payload.invoke(testcase, ObjectCreator.convertParameters(m.group(2)));
System.out.println("Boolean2 is: " + passed + "\n");
}
String output = passed ? "PASS" : "FAIL";
// I want to use the console output string variable here -> xxxx
TestCase.printResult(payload.getName(), output, m.group(2), xxxx, "");
} catch (Exception ex) {
ex.printStackTrace();
}
}
有什么办法吗?以前我尝试使用来自here 的教程之一。但这似乎不起作用。有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
-
@Fecid 我不太确定,因为我刚刚经历过,但我不确定如何使用它,因为该链接基于 system.out 输出。
-
在打印之前将所有输出存储在一个变量中就足够了吗?然后你就可以读取这些存储的值了。
-
如果您在代码中看到,我没有使用 System.out 或 print()。我正在使用.invoke 以编程方式调用该方法。我不确定如何在调用方法被触发时捕获输出?
-
@RaajLokanathan,是的,这就是我的想法。另一种选择是将本机代码打印到
std::stringstream,然后从该函数返回std::stringstream::str()?
标签: java c++ java-native-interface