从另一个java程序触发函数

Cro*_*ias 2 java swing

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

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

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

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

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

Bru*_*der 5

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

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

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

在Java世界中,

  • RPC通常使用其中之一来实现

    • RMI:仅Java解决方案; 易于实施; 不喜欢firwalls.
    • SOAP Web服务:不是以Java为中心的; 难以实施; 充满了陷阱; 网络友好.
  • 可以使用消息实现消息传递

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

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

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