问题:
我的应用程序存在一些性能问题 - 瓶颈是sun.awt.image.ImageFetcher.run
,我无法从探查器获得任何(更多)有意义的信息。所以我认为看看 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 实例
- 找出正在加载的图像
解决方案
问题是我已经将我的类放入sun.java.awt
包中以访问包受保护的成员,而没有将其放入rt.jar
,并且在调用时抛出异常ImageFetcher.class
。