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

时间:2018-10-12 16:02:40

标签: java python code-structure project-structuring

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

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

1 个答案:

答案 0 :(得分:1)

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

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

关于Java / C和Java / C ++的例子很多。 Python还支持与本机代码一起工作。请参见Calling C/C++ from Python?。因此,您可以使用C ++作为Java和Python之间的中间人。您将需要学习使用Python /本机桥,学习使用Java /本机桥,然后将两者结合在一起使用Python /本机/ Java。

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

另一个选项

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

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

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


针对您的具体情况

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

我也忘记了Jython。感谢@Jeremy指出这一点。我从未亲自使用过它,但是它是“ Java平台的Python”。您可以调查一下它是否满足您的需求。

另外,根据@那个其他人的评论:

  

Google Cloud Speech API具有Java API,就像具有Python   API。只需使用它即可为自己省很多麻烦。

因此,您甚至可能根本不需要进行任何桥接。但是,如果您决定仍然要支持多语言支持以及将来的用户,我将按照您的要求回答我的问题。