Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一台计算机上运行的java应用程序之间通信的最佳方式_Java - Fatal编程技术网

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

在同一台计算机上运行的java应用程序之间通信的最佳方式,java,Java,我正在编写一个小应用程序,它将充当更大应用程序的卸载程序。我希望卸载程序能够向正在运行的应用程序发送一条非常基本的消息(一个简单的通知) 最好的方法是什么 我想要的说明: public class Uninstall { public static void main(String[] args) { if(isRunning("Application")) { // Tell Application to clear data & exi

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

最好的方法是什么

我想要的说明:

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

你的选择基本上是

  • 通过文件系统

    有点笨重,但易于调试。基本上,您的主应用程序会关注文件系统(例如,通过使用
    监视服务
    。更多信息)

  • 穿普通袜子

    您的主应用程序打开一个套接字,并接受来自希望与其通信的其他应用程序的连接。如果您想做的只是能够关闭主应用程序,那么只需

    new Thread() {
        public void run() {
            new ServerSocket(123456).accept();
            System.exit(0);
        }
    }.start();
    
    也许可以

  • 超过RMI

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

假设您将同时构建主应用程序和安装程序。由于它们将在同一个JVM版本上运行,并且都在本地主机上运行,所以我绝对推荐使用RMI


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

谢谢您的快速回答,RMI绝对是我要找的。@Underbar:RMI对于您的目的来说可能是一个完全过份的、不必要的复合体。@jarnbjo您有什么建议吗?通过文件系统/套接字似乎为任何其他应用程序打开了一个漏洞,迫使我的应用程序卸载。RMI安全性不高。事实上,我不认为有什么方法可以阻止某人输入卸载程序。如果您只想发送一个简单的命令,那么简单的套接字可能是最好的选择。当然,可以实现某种身份验证机制,以防止任何“未知”应用程序发送IPC信号。RMI和普通套接字通信本身都不提供身份验证。