gpt4 book ai didi

java - 从 Java 调用编译的 C++ exe 文件不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:32 25 4
gpt4 key购买 nike

我正在尝试从 java 和我的 C++ 程序中调用 C++ 程序,如下所示:

// A hello world program in C++
// hello.cpp

#include<iostream>
using namespace std;

int main()
{
cout << "Hello World!";
return 0;
}

我所做的是使用 minGW 编译器 将 C++ 程序编译为 hello.exe,当我使用它时,它正在运行:

C:\Users\admin\Desktop>g++ -o hello hello.cpp

C:\Users\admin\Desktop>hello.exe
Hello World!

我创建了一个java程序,它应该调用C++编译的程序(hello.exe),但是我的java程序没有调用exe,我的程序如下:

//Hello.java

public class Hello {
public static void main(String []args) {

String filePath = "hello.exe";
try {

Process p = Runtime.getRuntime().exec(filePath);

} catch (Exception e) {
e.printStackTrace();
}
}
}

检查java程序的输出:

C:\Users\admin\Desktop>javac Hello.java

C:\Users\admin\Desktop>java Hello

C:\Users\admin\Desktop>

为什么它不起作用,请帮助我?

最佳答案

非常简单,您需要通过 ProcessInputStream 读取进程的输出,例如...

String filePath = "hello.exe";
if (new File(filePath).exists()) {
try {

ProcessBuilder pb = new ProcessBuilder(filePath);
pb.redirectError();
Process p = pb.start();
InputStream is = p.getInputStream();
int value = -1;
while ((value = is.read()) != -1) {
System.out.print((char) value);
}

int exitCode = p.waitFor();

System.out.println(filePath + " exited with " + exitCode);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.err.println(filePath + " does not exist");
}

一般来说,你应该使用ProcessBuilder而不是Process,它给你更多的选择

关于java - 从 Java 调用编译的 C++ exe 文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28359390/

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