java - 将 GUI 置于单独的进程中

标签 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 上运行。

考虑到这些限制,您会使用什么解决方案?

最佳答案

不久前我也遇到过同样的情况,只不过后端是Python,而GUI是java。

需要考虑的要点:

  • GUI 和后端之间的接口(interface)需要多么灵活和精细。您希望能够通过 GUI 做一件事吗? 5种不同的东西? 10? 50? GUI 的耦合程度如何——它会知道/正在调用后端的各个方法吗?
  • 输出如何从后端到达 GUI。它可以简单地写入 STDOUT 或临时文件吗?需要更复杂的东西吗?
  • 输出的格式。理想情况下,它应该易于解析,这表明 XML 或 JSON 可能是您的最佳选择。

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

<小时/>

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

关于java - 将 GUI 置于单独的进程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278729/

相关文章:

java - "Fixing"SWT 表中的前几列,以防止它们水平滚动

java - JTextField 事件监听器

java - WSWS7263E : The following exception occured : org. apache.axis2.AxisFault:HTTP(503) 不可用地址

java - 在 Spring Boot 应用程序中使用 @Bean 声明 bean

c++ - 使用 linux echo 命令的变量内容列表 Run with qtProcess

java - 当您单独调用 getChildren 时会发生什么?

java - Thymeleaf + Spring boot 如何避免使用 GET 请求创建实例

html - 在我的垂直菜单中悬停时出现边框问题

Java swt Canvas运行循环

Java SWT GC 未在 Canvas 上绘制文本