【发布时间】:2011-11-26 13:31:59
【问题描述】:
我目前正在为我创建的 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 上运行。
鉴于这些限制,您会使用什么解决方案?
【问题讨论】:
-
“我应该使用什么技术来将客户端的界面暴露给 GUI?” 我可能误解了这个问题,但我倾向于简单地将它添加到运行中 - GUI 的时间类路径。直接实例化类并使用它们的方法比使用 RMI 或类似技术要简单得多。我也不太了解 GUI 崩溃并希望保持客户端运行。保持客户端运行有什么意义?
-
客户端是备份程序。如果 GUI 崩溃,我仍然希望保持备份运行。我还希望能够访问客户端的类实例。 AFAIK,仅通过设置运行时类路径是不可能的。
-
“客户端是一个备份程序。如果GUI崩溃了,我还是想让备份继续运行。” 让备份可以恢复不是更好吗?如果有人绊到 PC 的电源线怎么办?在单独的进程中(在同一台机器上)运行 B/U API 对此无济于事。 ;)
-
它是可恢复的。但是,我仍然希望尽量减少它崩溃的机会。例如。它可能会在 fsync 中间崩溃并损坏某些文件。仅仅因为它不能提供 100% 的保护并不意味着它一文不值。
标签: java user-interface swt ipc rmi