有没有办法在另一个Java进程中控制windows?

Is there a way to control windows in another Java process?

我有一个 java Swing 程序,有时必须在没有用户干预的情况下自行重启。问题是我必须提供一个用

创建的新实例
Runtime.getRuntime().exec("java -jar " + applicationJarPath, previousCommandLineArguments);

用于自动登录过程的用户名和密码。并且登录名和密码都不能作为命令行参数传输(出于安全原因)。文件或任何不在内存中的东西也是如此。我可以使用套接字,但这可能会造成另一个可能的安全漏洞(如果有人连接到前一个实例等待的同一端口)。

所以我在考虑将用户名和密码打印到相应的控件中。

我的问题是:

  1. 是否可以通过某种方式在同一应用程序的另一个实例中找到并控制 Swing 控件?
  2. 如果这不可能(或相当困难),有没有办法将用户名和密码安全地传递给程序的另一个实例?

现代操作系统旨在防止进程相互访问。有多种进程间通信 (IPC) 或远程过程调用 (RPC) 机制可以以有限和受控的方式实现这一点,但程序必须有意识地使用它们。换句话说,您的程序必须监听消息。您不能随意访问其他一些程序。

您可以通过搜索 java rpc 找到一长串可能的解决方案。在基于 Java 的平台上有不同的选项,例如 Android。您也可以使用 TCP 套接字或其他东西来滚动您自己的。

顺便说一下,如果您担心安全问题,程序的第一个实例一开始就不应该保留密码。