0

我正在寻找 Java 应用程序“A”和另一个 Java 应用程序“B”之间的通信。我听说过 JNI、Webservices 和其他东西......

当前状态: 我有两个独立的 Java 应用程序;目前我可以手动启动,并且每个都运行良好。对于每个应用程序,我编写了一个测试类来检查每个功能和所有副作用......;应用程序 B 实现了一个接口,所以我知道我要运行的每个函数 @B!每个应用程序都使用相同的接口来交换数据(将来)。

问题: 现在我想启动应用程序 A(它自己启动 ~5 个线程)。A 应该在定义的路径中搜索所有 JAR 文件并启动其中一个(通过 UI @A 选择)。好的,这对我来说不是大问题!我的问题:我想与加载的“JAR 文件”(或更好:与 JAR 文件中的应用程序)进行交互。

问题: 如何通过取消简单的工具或框架进行交互?Web 服务似乎不够动态(我不是 Web 服务方面的专家,jet!)!?

对我来说重要的是以下几点:

  • 快速沟通
  • 需要动态加载外部库(例如,其他 Java 应用程序 = B.)
  • 包名不应该是重要的(我想对其他开发者开放)
  • 对其他开发者开放(他们只需要实现我的界面)

更详细

  • A是控制器/服务器/etc;或多或少地运行@背景
  • B(或我的接口的所有其他实现)是一个游戏;从 A 开始,从 A 控制,从 A 停止
4

2 回答 2

0

阅读所有说明后,我建议在单独的 JVM 中运行“控制器”应用程序,并使用 shell 命令在单独的 JVM 中启动“游戏”。

如果需要“控制器”和“游戏”之间的进一步通信,最简单的进程间通信技术是套接字和 Java RMI。

有一种技术可以允许“控制器”和“游戏”在同一个 JVM 中共存,即使它们使用相同库的不同版本。它还允许在不重新启动 JVM 的情况下动态加载和卸载模块。这项技术是 OSGi,但在我看来,掌握它需要比使用 shell、套接字和/或 Java RMI 更陡峭的学习曲线。

于 2013-08-08T14:27:36.827 回答
0

我是这样做的:

  • 使用您必须使用的所有方法为您的游戏创建一个界面,您将提供
  • 编写实现接口的game.class

  • 生成一个新的游戏类型对象(游戏 g = null;)

  • 在你必须创建实例的地方你可以写: g = new Game();
  • 我用“instanceof”检查了类型

  • 代码将很快出现..

于 2014-04-25T10:43:53.987 回答