假设我们在一个JVM中运行了一个Java Swing应用程序 swingapp 。是否可以从另一个 JVM /进程中运行的Java应用程序控制 swingapp ,例如像这样:
ControlApp.java
process = startSwingAppInAnotherProcess();
JFrame frame = getSwingAppJFrame();
frame.visible(false) // hide swingapps JFrame
doAllKindsOfThingsWithJFrame(frame)..
killSwingApp(process);
用例是GUI测试,我想要一个通用的解决方案,可以在外部进程中启动/停止任何Swing应用程序,使其与测试运行器完全隔离,但它仍然可以通过Swing操作控制应用程序
如果可能的话,非常感谢具体的例子。
答案 0 :(得分:0)
我认为有一些与平台相关的方法可以将UI事件发送到同一桌面中的GUI元素;但是我最好考虑一些标准的进程间通信。
您可以尝试在某个端口范围内启动应用程序,只需让它们搜索每个兄弟,并通过套接字在它们之间进行通信。或者你可以启动一种父守护进程,其中每个子进程自我注册(再次通过套接字),然后父进程将状态更改传递给它的子进程(类似于Subject-Observer模式的分布式版本)
答案 1 :(得分:0)
可以使用某种“更高”级别的套接字 - ZeroMQ。
您可以从服务器开始实现jframe.hide API调用。
注意:如果您不喜欢本机C传输实现,那么您可以切换到 pure java version,无需对代码进行其他更改。