我有一个Java GUI和一个C程序。 C程序计算给定值(args)。我想在Java中调用C计算器,并在GUI中将标签更改为返回值(标签几乎每秒都会更改)。
我想了一些方法,
套接字编程(可能在同一台计算机上效率不高)
文件操作(Java写入输入,c计算然后java读取计算值)
JNICALL的东西,但我不知道如何从c文件中获取价值。
SharedMemory(我不知道windows shm)
解决此问题的最佳方法是什么?
答案 0 :(得分:1)
如果您的C程序是JNA的DLL,您可以查看export functions。
请记住,从过去的项目开始,它的工作非常顺利,无需自己动手制作JNI。
答案 1 :(得分:0)
我必须在我的工作中做类似的事情,我用C ++编写了一个辅助程序来访问一些自定义数据库,我的主应用程序是用Java编写的。数据库API仅适用于C ++程序。
我所做的是从Java启动C ++过程并通过命令行args和stdout进行通信。
List<String> cmdPathAndArgs = Arrays.asList("/path/to/binary", "--arg1", "--arg2");
ProcessBuilder pb = new ProcessBuilder(cmdPathAndArgs);
Processpp = pb.start();
InputStream stream = pp.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
InputStream errorStream = pp.getErrorStream();
BufferedReader errorBr = new BufferedReader(new InputStreamReader(errorStream));
如果你的progran在stdout和stderr中生成输出,你可能陷入僵局。你应该定期清空两个流。
答案 2 :(得分:0)
如果您可以将C代码构建到共享库中,那么JNI可能是您最好的选择。套接字将足够快,以便每秒处理1次更新。使用文件可能比套接字慢。共享内存也很好,但我认为套接字可能是你想要做的更简单的接口。