【发布时间】:2011-11-24 13:00:12
【问题描述】:
让我们举一个非常基础的例子,我有一个程序遍历一个目录并获取目录中的文件列表。为了论证的缘故,假设这必须在 C++ 中完成。然后我希望使用 Java Swing 提供文件列表?
这是怎么做到的?
【问题讨论】:
-
混合使用 Java 和任何其他语言(无论如何都不会编译为 JVM 字节码)是异端。它必须全部是纯 Java 以免被 cooties 消耗掉,或者其他什么。
让我们举一个非常基础的例子,我有一个程序遍历一个目录并获取目录中的文件列表。为了论证的缘故,假设这必须在 C++ 中完成。然后我希望使用 Java Swing 提供文件列表?
这是怎么做到的?
【问题讨论】:
您可以让您的 C++ 程序写入标准输出,然后您的 Java 程序可以从中读取。然后,您可以让 Java 前端执行 C++ 后端,然后读取结果。
This Article 是一个很好的关于如何使用 stdout/stderr 的信息来源。
【讨论】:
您可以通过Java Native Interface (JNI) 进行操作。 Oracle 有一个official guide,但您可能会发现用 Google 搜索教程更容易。
【讨论】:
一种基本方法是将 c++ 输出存储在文本文件中并从 java 中读取。
【讨论】:
C++ 程序将列表放入特定文件中,而 Java 程序读取该文件? 另一种方法可能是使用套接字(我不太了解 Java,无法知道它的 IPC 可能性)在“实时”程序之间进行通信。
最后,如果你必须同时使用 C++ 和 Swing,那么你不能在一个程序中完成。
【讨论】:
按照 Kevin 的建议使用 Java 本机接口 (JNI)。或者,如果您需要在 Java 和 C++ 之间建立进程边界,则需要将运行 C++ 代码的进程中的对象序列化到 JVM 进程。
你也可以在这个Dr. Dobb's article from 1998中找到一些用处。
【讨论】: