Вопрос:
У меня есть проблема с производительностью в моем приложении - узким местом является 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
.