在同一台计算机上运行的Java应用程序之间通信的最佳方式

时间:2014-09-29 12:56:30

标签: java

我正在编写一个小应用程序,它将作为更大应用程序的卸载程序。我希望卸载程序能够在应用程序运行时向应用程序发送非常基本的消息(简单通知)。

这样做的最佳方式是什么?

我想要的插图:

public class Uninstall {
    public static void main(String[] args) {
        if(isRunning("Application")) {
            // Tell Application to clear data & exit
            sendMessage("Application","EXIT");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你的选择基本上是

  • 通过文件系统

    有点笨重,但很容易调试。基本上你的主要应用程序会关注文件系统(例如使用WatchService。更多信息here)。

  • 通过普通的袜子

    您的主应用程序打开一个套接字并接受来自其他想要与之通信的应用程序的连接。如果你想做的就是能够关闭主应用程序,就像

    这样简单
    new Thread() {
        public void run() {
            new ServerSocket(123456).accept();
            System.exit(0);
        }
    }.start();
    

    可能会这样做。

  • 超过RMI

    使用RMI注册表让卸载程序在主应用程序上进行远程方法调用。

假设您将同时构建主应用程序和安装程序。因为它们将在相同的JVM版本上运行,并且都在localhost上运行,我肯定会推荐RMI。

(其他特定于操作系统的答案可能包括命名管道或信号,但我不鼓励你朝这个方向前进。)