如何在一个项目中使用不同的语言



最近我决定用Java和Python编写一个程序,但我不知道该怎么做......有没有办法让类在项目中一起通信,以便例如 Python 方法可以被 Java 调用?是否有任何框架可以让我处理这个问题? 我还想知道有经验的程序员是如何用多种语言编写项目的。

我的想法是用JavaFX编写我的程序的GUI,因为它的外观很棒,并且使用Google库在Python中进行语音识别。

有第三方库可用于此目的,但如果您也愿意包含第三种语言,也可以在没有的情况下建立该桥接。由于您问题的标题,这部分答案提供了更通用的"不同语言"答案。

JavaJNI(Java Native Interface(允许您在Java和本机代码之间架起桥梁。从技术上讲,本机代码可以用于编译为本机代码或以某种方式支持它的任何语言,但在实践中,JNI 通常用于使 Java 与 C 或 C++ 一起工作。

Java/C 和 Java/C++ 有很多例子。Python还支持与本机代码一起工作。请参阅从 Python 调用 C/C++?所以你可以做的是使用C++作为Java和Python之间的中间人。你需要学习使用Python/native bridge,并学习使用Java/native bridge,然后将两者放在一起去Python/native/Java。

这有利有弊。 缺点:您现在被迫引入第三种语言并支持更大的复杂性。优点:如果您愿意同时使用多种语言,这自然会打开同时使用多种不同语言的大门,因为许多语言都支持调用本机代码。

另一种选择

另一种方法是让每种不同的语言在单独的进程中运行,并让不同的进程通过某种类型的进程间通信来回传递数据。执行此操作的一些常见方法是通过套接字(与用于网络通信的相同内容(、磁盘上的文件和共享内存。

虽然套接字可能以网络通信而闻名(即:"http 互联网流量通常在端口 80 上打开服务器的套接字"(,但它也常用于本地进程间通信。您将以相同的方式打开套接字,但它通常是主机名"localhost",通常是 IP 地址127.0.0.1

这增加了跟踪进程之间的消息并实际处理它们的复杂性。根据您的环境和需求,这种复杂性可能比在一个进程中运行多种语言或多或少复杂。如果以后需要扩展应用程序,将其分离为多个进程可能会使在套接字或文件的情况下更轻松地在多台计算机之间分配负载。


针对您的具体情况

你提到你想要Java作为GUI。无论如何,Java GUI 都是在它自己的独立线程上处理的,所以你应该能够从 Python 调用 Java 中的 GUI 初始化函数来设置和显示你的 GUI。只需注意并发问题(即多线程问题(。

另外,我已经忘记了Jython。感谢@Jeremy指出这一点。我个人从未使用过它,但它是"Java平台的Python"。你可以研究一下,看看它是否提供了你需要的东西。

另外,根据另一个人的评论@that:

Google Cloud Speech API 有一个 Java API,就像它有一个 Python 一样。 应用程序接口。只需使用它,就可以为自己省去很多麻烦。

因此,您甚至可能不需要首先进行任何桥接。但是,如果您决定无论如何都要允许多语言支持,并且将来的用户,我将对您的问题留下答案。

相关内容

  • 没有找到相关文章

最新更新