从另一个java程序触发函数

时间:2013-07-02 07:09:06

标签: java swing

我们有一个服务器应用程序和两个独立的客户端应用程序(两者都具有不同的功能 - 一个用于前台,另一个用于后台)。一切都是用Java编写的。

我们现在需要的是: 如果两个应用都在运行 - 点击一个应用中的按钮 - >检查其他应用程序是否已打开并触发该应用程序上的某些功能(显示消息,打开框架)

如果其他应用未打开 - >它应该显示一条消息说明。

任何人都可以指出我正确的方向来实现这一目标。我能给出的最好的现实生活示例是:如果安装了iTunes应用程序,那么点击网页浏览器中的itunes链接会打开相应的appstore页面。

编辑:我们的应用程序根本不涉及网站。一切都使用Swing。

1 个答案:

答案 0 :(得分:5)

没有“最好”的方式来实现应用内通信,但有很多方法;最好的一个将是最适合您的环境:网络条件,防火墙,呼叫数量,同步与异步等...

通常使用以下任一方式实现沟通:

  • 远程过程调用:应用程序基本上调用另一个应用程序上的函数/方法并传递参数。 RPC通常是同步的:响应在同一个通信/事务中发送
  • 消息:应用程序向其他应用程序发送消息,可能会回复其他消息。消息传递通常是异步的。 使用REST等协议,两者之间的边界可能非常模糊。

在Java世界中,

  • RPC通常使用

    实现
    • RMI:仅Java解决方案;易于实施;不喜欢firwalls。
    • SOAP Web services:不以Java为中心;难以实施;充满了陷阱;网络友好。
  • 可以使用

    实现消息传递
    • JMS:仅限Java;相当容易实现但异步;在高负荷下极其强大
    • JSON / XML HTTP / s消息传递:这里有许多协议,从最安全的AS2到RNIF,普通的XML / Json POST等......这些是网络和语言无关的,但总是需要一些工作实施

混合方法是REST,由于易于实现和网络友好的优点而变得非常流行,但具有不正式化的缺点。它是一种技术而不是规范。我会查看围绕JAX-RS的文档以及RestletJersey等框架,以帮助您入门。

(编辑) 我故意没有提到使用Java套接字开发自己的套接字。根据定义,IO是不纯的,而且经常是多线程的:IO 非常难以正确使用。如果你真的坚持沿着这条路走下去,至少应该使用像Apache Mina或Netty这样的合适框架的帮助。