gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:43:12 26 4
gpt4 key购买 nike

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

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

最佳答案

有第三方库可以用于此目的,但如果您也愿意包含第三种语言,也可以不使用该桥梁。由于您的问题的标题,这部分答案提供了更通用的“不同语言”答案。

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

有很多 Java/C 和 Java/C++ 的示例。 Python 还支持与 native 代码一起工作。请参阅Calling C/C++ from Python?所以你可以做的就是使用 C++ 作为 Java 和 Python 之间的中间人。您需要学习使用 Python/native 桥接器,并学习使用 Java/native 桥接器,然后将两者结合起来以实现 Python/native/Java。

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

另一种选择

实现此目的的另一种方法是让每种不同的语言在单独的进程中运行,并让不同的进程通过某种类型的进程间通信来回传递数据。一些常见的方法是通过 sockets (与网络通信使用的相同),以及磁盘上的文件,以及 shared memory .

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

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

<小时/>

针对您的具体情况

您提到您希望使用 Java 作为 GUI。无论如何,Java GUI 都是在其自己的单独线程上处理的,因此您应该能够从 Python 中调用 Java 中的 GUI 初始化函数来设置和显示 GUI。只需要注意并发问题(即多线程问题)。

另外,我忘记了 Jython 。感谢@Jeremy 指出这一点。我个人从未使用过它,但它是“Java 平台的Python”。您可以研究一下它是否提供您需要的内容。

此外,根据@that other person 的评论:

The Google Cloud Speech API has a Java API just like it has a Python API. Just use that and save yourself a ton of trouble.

因此,您可能甚至不需要首先进行任何桥接。不过,我会按照您提出的问题留下我的答案,以防您决定无论如何都要允许多语言支持,并供 future 的用户使用。

关于java - 如何在一个项目中使用不同的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com