Java 连接到另一个JVM并侦听事件?可能的

Java 连接到另一个JVM并侦听事件?可能的,java,debugging,swing,ipc,listener,Java,Debugging,Swing,Ipc,Listener,我正在尝试编写一个小型的内部工具,用于调试Swing应用程序中的焦点问题。现在,调试器工具内置于应用程序中,并通过调试命令行参数启用 我想做的是拥有一个独立的Java应用程序,它可以连接到另一个JVM并侦听某些事件(在本例中,是KeyboardFocusManager上的PropertyChangeEvents) 理想情况下,它应该能够做到这一点,而不需要对正在调试的应用程序进行任何更改,因此它可以“按需”用于调试任何Swing应用程序中的焦点问题。有点像VisualVM如何连接到任何正在运行的

我正在尝试编写一个小型的内部工具,用于调试Swing应用程序中的焦点问题。现在,调试器工具内置于应用程序中,并通过调试命令行参数启用

我想做的是拥有一个独立的Java应用程序,它可以连接到另一个JVM并侦听某些事件(在本例中,是KeyboardFocusManager上的PropertyChangeEvents)

理想情况下,它应该能够做到这一点,而不需要对正在调试的应用程序进行任何更改,因此它可以“按需”用于调试任何Swing应用程序中的焦点问题。有点像VisualVM如何连接到任何正在运行的VM


这可能吗?起点是什么?JMX?其他一些IPC机制?

不确定这是否涵盖了它,但是。。假设应用程序是使用以下标志启动的:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n

您可以使用Eclipse将调试器远程连接到进程。

您可以使用java平台调试器体系结构(JPDA)


没错,但我想要一个独立的应用程序,它基本上会通知您所有焦点更改事件。有没有可能通过调试API以编程方式实现这一点?焦点更改事件是编程的,这就是为什么必须有侦听器对它们做出反应,JVM无法神奇地对它一无所知的事情做出反应。啊。JDI(Java调试接口)中的类MethodEntryRequest就是这样做的。基本上,流程是附加到流程,获取EventRequestManager的实例,在那里注册方法输入请求并启用它。您仍然需要我在上面发布的调试标志。对上面的响应-假设主机操作系统通知进程焦点更改事件,一旦它们进入应用程序,就可以被拦截。@Jarrod:您可以通过向KeyboardFocusManager添加PropertyChangeListener来侦听所有焦点更改:KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(“focusOwner”,new PropertyChangeListener(…);这正是我需要的。向KeyboardFocusManager.focusOwner添加了一个ModificationWatchpointEvent,它就像一个符咒。谢谢