2014-06-20 51 views
0

我正在構建一個java分析工具,該機制要求將應用程序的所有線程實例替換爲子類「ProfilingThread」,它將覆蓋某些線程的行爲以實現分析功能。覆蓋AWT事件派發線程

鑑於Java應用程序的源代碼,我可以簡單地將所有「線程」類重新分配到「ProfilingThread」類。但是,AWT事件調度程序的線程沒有被用戶代碼實例化,而是在AWT函數被調用時自動創建。

我能做些什麼來用ProfilingThread實例替換AWT事件調度程序的Thread實例?

歡迎任何想法和批評。

+0

比較遺憾的是,題目的問題添加。 – 314314314

回答

2

首先有點批評:在生產級應用程序中對Java內部進行黑客攻擊通常不是一個好主意。

更好的解決方案是爲事件分派線程的任何實例添加專門的處理,並只分析自己的類。這也是很有可能的java的其他部分將啓動其他線程也不會延長了你的ProfilingThread的...

但如果你改變AWT事件指派線程:

事件調度線程是在系統事件隊列java.awt.EventDispatchThread情況下,獲得由

Toolkit.getDefaultToolkit().getSystemEventQueue() 

要更換線程您在使用ProfilingThread重新實現java.awt.EventDispatchThread或更好的延長EventDispatchThread並添加分析功能。

然後,您必須使用反射設置字段,因爲它是私人的,通常不能從外部改變。 (有關於如何做到這一點的例子很多)

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

+0

你說得對,我已經很後悔採取黑客Java內部的方法。 – 314314314