Question:accès des classes non publiques en paquet sun.awt [spécifiquement: FetcherInfo]
J'ai un problème de performance dans mon application - et le goulot d'étranglement est sun.awt.image.ImageFetcher.run
, et je canno't obtenir une (plus) informations significatives de profiler. J'ai donc pensé que ce serait bien de regarder les travaux que fait ImageFetcher.
Je n'ai pas pu accéder à la classe FetcherInfo
, qui contient tous les emplois ImageFetcher
. Pour obtenir FetcherInfo
instance, je dois appeler FetcherInfo.getFetcherInfo()
.
J'ai créé la classe dans le paquet sun.awt.image
(juste dans mon projet, je n'ai pas bricolé avec rt.jar).
Pour FetcherInfo
j'utiliser:
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();
}
Je me exception: Exception in thread "IMAGE-FETCHER-WATCHER" java.lang.IllegalAccessError: tried to access class sun.awt.image.FetcherInfo from class sun.awt.image.FetcherDebug
Et les points de trace de pile à:
for(Method method : FetcherInfo.class.getDeclaredMethods()){
La même exception a été soulevée par:
FetcherInfo.class.getMethod("getFetcherInfo");
Alors quelqu'un a des idées comment soit:
- Obtenir exemple ImageFetcher
- Découvrez ce que les images se charger
SOLUTION
Le problème était que je » J'ai mis ma classe dans le paquet sun.java.awt
pour avoir accès aux membres protégés du paquet, sans le mettre dans rt.jar
, et excep tion a été lancée poule appelant ImageFetcher.class
.
Si vous voulez dire Méthode # setAccessible, je ne peux pas le faire, parce exception est levée avant que je accès à instance de méthode (elle apparaît lors d'un appel à FetcherInfo.class.getDeclaredMethods()). –
Fonctionne pour moi! Qu'est-ce que tu fais c'est bizarre? Pouvez-vous écrire un petit exemple complet qui démontre le problème. –
Dumb, muet, stupide moi. Tout fonctionne maintenant :) le problème appelait FetcherInfo.class. –