繁体   English   中英

如何在一个项目中使用不同的语言[关闭]

How to use different languages in one project [closed]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

1 个回复

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

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。 只需使用它即可为自己省很多麻烦。

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

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

我最近听说过在一个(大)项目中使用了几种不同的语言,我还读到了一些着名的服务,比如使用Rails作为前端的Twitter,与其他一些语言混合使用,而Scala我认为它是后端。 这是常见做法吗? 谁那样做? 我相信这有不利之处。 我认为您将遇到不同的解释器/编译器问题并无缝连 ...

2 如何在一个项目中使用不同的primefaces版本?

在我的项目中,我必须实现一个使用primefaces v6.1的页面,但其他页面是使用primefaces版本3编写的。其他页面的版本很难更新,另一方面,我不想将v3用于新页面。 首先我有一个主意; 操作META-INF中的primefaces-p.taglib.xml , < ...

4 在一个项目中使用不同版本的 yocto

对于一个项目,我必须使用相扑,因为它是供应商支持的最后一个版本。 但是,我也想使用具有以下兼容性的包含 ROS () 的层: LAYERSERIES_COMPAT_ros-layer = "rocko sumo thudWarrior" 但是在 README.md 中它说需要: 当我将所有层与 ...

10 如何在项目中使用不同的改造库

其中一个库正在使用retrofit:1.9.0和一个正在使用retrofit:2.0.0如果我禁用其中任何一个,正在使用它的库崩溃。 如果我添加他们两个如下 该应用程序开始在棒棒糖设备上崩溃。 java.lang.NoClassDefFoundError:解析失败:Lr ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM