在单独的进程中使用GUI

时间:2011-11-26 13:31:59

标签: java user-interface swt ipc rmi

我正在为我创建的Java应用程序开发GUI。我想将GUI与客户端的其他部分保持在一个单独的进程中。这背后的理由是:

  • 降低崩溃的风险。例如。 GUI中的OutOfMemoryError不会使客户端的其余部分崩溃。
  • 我免费获得API。如果我以后想要允许其他人以编程方式访问客户端,我可以让他们使用GUI正在使用的相同API。
  • 我在SWT中编写GUI,使用IntelliJ创建客户端。由于Eclipse有更好的SWT支持,因此将它们分开是有意义的,这样我就可以使用Eclipse作为GUI代码,而将IntelliJ用于其余部分。

我现在的问题是:我应该使用什么技术来将客户端的界面暴露给GUI? RMI首先浮现在脑海中。但是,这具有将API限制为仅Java的缺点。我也不确定RMI适合大规模部署的程度(例如,它如何处理本地防火墙?)。但是,我现在还不想排除它。

我还应该提到我也有一些部署要求:

  • 必须能够以非管理员身份运行。
  • 必须能够处理限制性本地防火墙限制。
  • 部署必须是自动的(它是一个大规模的消费者应用程序),并且可以在Windows,Mac OS X和Linux上运行。

鉴于这些限制,您会使用什么解决方案?

1 个答案:

答案 0 :(得分:2)

前段时间我遇到了同样的情况,除了后端是在Python中,而GUI是在java中。

需要考虑的重点:

  • GUI和后端之间的接口需要多么灵活和精细。你想从GUI做一件事吗? 5件不同的东西? 10? 50? GUI是如何紧密耦合的 - 它会知道/在后端调用单个方法吗?
  • 输出如何从后端传递到GUI。它可以简单地写入STDOUT或临时文件吗?它需要更复杂的东西吗?
  • 输出的格式。理想情况下,它应该易于解析,这表明XML或JSON可能是您最好的选择。

您可能会发现JSON-RPC很有用:它是远程方法调用单独程序的标准。


总而言之,我很难说出最适合你的方式。我最终避免使用RPC,并为后端提供了一个简单的命令行界面;输出作为JSON对象写入临时文件和STDERR。我觉得这是一个很好的决定,因为它使程序之间的界面非常简单和解耦。