gpt4 book ai didi

java - 覆盖 AWT 事件调度线程

转载 作者:行者123 更新时间:2023-11-30 03:51:34 26 4
gpt4 key购买 nike

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

鉴于 Java 应用程序的源代码,我可以简单地将所有“Thread”类重构为“ProfilingThread”类。但是,AWT 事件调度程序的线程不是由用户代码实例化的,而是在调用 AWT 函数时自主创建的。

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

欢迎所有想法和批评。

最佳答案

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

更好的解决方案是为事件调度线程的任何实例添加专门的处理,并且只分析您自己的类。 java 的其他部分也很可能会启动其他线程,这些线程也不会扩展您的 ProfilingThread...

但是如果您必须更改 AWT 事件调度线程:

事件调度线程是系统事件队列中的一个java.awt.EventDispatchThread实例,可通过以下方式获取

Toolkit.getDefaultToolkit().getSystemEventQueue()

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

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

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

关于java - 覆盖 AWT 事件调度线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com