覆盖AWT事件调度线程

时间:2014-06-20 07:25:37

标签: java multithreading awt event-dispatch-thread

我正在构建一个java分析工具,该机制要求应用程序的所有Thread实例都被子类替换" ProfilingThread"它覆盖了一些线程的行为,以实现分析功能。

鉴于Java应用程序的源代码,我可以简单地重新计算所有" Thread" class to" ProfilingThread"类。但是,AWT事件调度程序的线程不是由用户代码实例化的,而是在调用AWT函数时自动创建。

如何用ProfilingThread实例替换AWT事件调度程序的Thread实例?

欢迎所有的想法和批评。

1 个答案:

答案 0 :(得分:2)

首先有点批评:在生产级应用程序中破解Java内部结构通常不是一个好主意。

更好的解决方案是为事件调度线程的任何实例添加专门的处理,并仅配置您自己的类。很有可能java的其他部分将启动其他线程,这些线程也不会延伸到ProfilingThread ...

但是如果你来改变AWT事件调度线程:

事件调度线程是系统事件队列中的java.awt.EventDispatchThread实例,可通过

获取
Toolkit.getDefaultToolkit().getSystemEventQueue()

要替换线程,您必须使用java.awt.EventDispatchThread重新实现ProfilingThread,或者更好地扩展EventDispatchThread并添加分析功能。

然后你必须使用反射来设置字段,因为它是私有的,通常无法从外部进行更改。 (有很多关于如何做到这一点的例子)

作为参考:http://developer.classpath.org/doc/java/awt/EventQueue-source.html