【问题标题】:Front end Java, back end C++ , how to join?前端Java,后端C++,如何加入?
【发布时间】:2011-11-24 13:00:12
【问题描述】:

让我们举一个非常基础的例子,我有一个程序遍历一个目录并获取目录中的文件列表。为了论证的缘故,假设这必须在 C++ 中完成。然后我希望使用 Java Swing 提供文件列表?

这是怎么做到的?

【问题讨论】:

  • 混合使用 Java 和任何其他语言(无论如何都不会编译为 JVM 字节码)是异端。它必须全部是纯 Java 以免被 cooties 消耗掉,或者其他什么。

标签: java c++


【解决方案1】:

您可以让您的 C++ 程序写入标准输出,然后您的 Java 程序可以从中读取。然后,您可以让 Java 前端执行 C++ 后端,然后读取结果。

This Article 是一个很好的关于如何使用 stdout/stderr 的信息来源。

【讨论】:

    【解决方案2】:

    您可以通过Java Native Interface (JNI) 进行操作。 Oracle 有一个official guide,但您可能会发现用 Google 搜索教程更容易。

    【讨论】:

      【解决方案3】:

      一种基本方法是将 c++ 输出存储在文本文件中并从 java 中读取。

      【讨论】:

        【解决方案4】:

        C++ 程序将列表放入特定文件中,而 Java 程序读取该文件? 另一种方法可能是使用套接字(我不太了解 Java,无法知道它的 IPC 可能性)在“实时”程序之间进行通信。

        最后,如果你必须同时使用 C++ 和 Swing,那么你不能在一个程序中完成。

        【讨论】:

        • +1 使用套接字。我总是喜欢这种方法。它可以是瞬时的,并且同步很容易。您可以让 Java 程序使用 TCP 套接字进行侦听,然后 C++ 程序可以连接到该端口并发送 TCP 消息。
        • ...你不能在一个程序中做到这一点,除非你使用 JNI
        【解决方案5】:

        按照 Kevin 的建议使用 Java 本机接口 (JNI)。或者,如果您需要在 Java 和 C++ 之间建立进程边界,则需要将运行 C++ 代码的进程中的对象序列化到 JVM 进程。

        你也可以在这个Dr. Dobb's article from 1998中找到一些用处。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-02
          • 2011-11-23
          • 2012-02-21
          • 2016-09-03
          • 2015-09-06
          • 1970-01-01
          • 1970-01-01
          • 2021-02-01
          相关资源
          最近更新 更多