問:訪問非公共類在sun.awt包[明確:FetcherInfo]
我在我的應用程序的一些性能問題 - 和瓶頸是sun.awt.image.ImageFetcher.run
,我canno't得到任何(更)來自探查器的完整信息。所以我想,看看ImageFetcher正在做的工作會很好。
我無法訪問FetcherInfo
類,該類包含所有ImageFetcher
作業。要獲得FetcherInfo
實例,我必須致電FetcherInfo.getFetcherInfo()
。
我在包sun.awt.image
中創建了類(就在我的項目中,我沒有用rt.jar修補)。
要獲得FetcherInfo
我使用:
try{
for(Method method : FetcherInfo.class.getDeclaredMethods()){
method.setAccessible(true);
if(method.getName().equals("getFetcherInfo")){
m = method;
}
}
}catch (Exception e){
e.printStackTrace();
}
FetcherInfo info = null;
try {
info = (FetcherInfo) m.invoke(null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
而且我得到異常:Exception in thread "IMAGE-FETCHER-WATCHER" java.lang.IllegalAccessError: tried to access class sun.awt.image.FetcherInfo from class sun.awt.image.FetcherDebug
而且堆棧跟蹤點:
for(Method method : FetcherInfo.class.getDeclaredMethods()){
同樣的異常被提出:
FetcherInfo.class.getMethod("getFetcherInfo");
因此,任何人有任何想法如何可以:
- 獲取ImageFetcher例如
- 瞭解越來越裝什麼樣的圖像
SOLUTION
的問題是,我」我已將我的課程放入sun.java.awt
包中以獲得對包保護成員的訪問權限,而不會將其放入rt.jar
中,並且可以使用excep被投擲母雞叫ImageFetcher.class
。
如果你的意思#方法setAccessible,我不能這樣做,因爲異常被拋出之前,我訪問方法實例(它會在調用FetcherInfo.class.getDeclaredMethods()時發生)。 – 2009-05-04 15:58:10