在Java和C之间传递值

时间:2014-07-23 13:14:35

标签: java c variables

我有一个Java GUI和一个C程序。 C程序计算给定值(args)。我想在Java中调用C计算器,并在GUI中将标签更改为返回值(标签几乎每秒都会更改)。

我想了一些方法,

  1. 套接字编程(可能在同一台计算机上效率不高)

  2. 文件操作(Java写入输入,c计算然后java读取计算值)

  3. JNICALL的东西,但我不知道如何从c文件中获取价值。

  4. SharedMemory(我不知道windows shm)

  5. 解决此问题的最佳方法是什么?

3 个答案:

答案 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次更新。使用文件可能比套接字慢。共享内存也很好,但我认为套接字可能是你想要做的更简单的接口。