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

黑天才

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

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

路易

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

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

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

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

另外一个选项

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

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

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


针对您的具体情况

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在另一个Maven项目中使用一个Maven项目的属性

如何在IntelliJ IDEA中使用另一个项目中的类?

如何在一个Scrapy项目中为不同的Spider使用不同的管道

如何在Golang中使用不同的界面在一个网页中执行多个模板?

如何在html,javascript中的一个范围输入中使用不同的step属性

如何在一个Metal API场景中使用不同的片段着色器?

如何在一个Keras层中使用不同的激活功能?

如何在Rust货运项目中使用另一个模块中的一个模块?

如何在一个项目中设置VBA全局变量并在另一个项目中使用?

如何在Laravel 5.6的一个刀片文件中使用不同的形式

如何在一个Vuejs项目中使用多个模板?

如何在2个不同的项目中使用Firebase?

如何在一个css文件中使用不同的颜色主题

如何在一个端点中使用不同的请求主体?

我可以在同一Google App Engine项目中使用不同的服务运行不同的语言吗?

如何在一个数组中使用不同类的对象?(Java)

LibGDX如何在一个阶段中使用不同的批次

引用同一项目中的一个类,使用不同的模块

如何在一个项目中使用Sugar Orm和Google Analytics

如何在另一个项目中使用一个site.master?

如何在我的Android Studio项目中使用一个代号迁移工具?

如何在Visual Studio中使用一个项目中的文件在另一个项目中创建库?

如何在另一个项目中使用 crate 使其不再编译?

如何在一个 MapView 中使用不同的视图

如何在java中的另一个项目中使用一个项目中的类?

如何在 c++ Autotools 项目中使用不同版本的 g++ 进行编译

如何在一个 angular 7 项目中使用 2 个不同的引导程序主题?

如何在同一个 HTML 链接中使用不同的颜色?

如何在另一个php项目中使用laravel路由系统?