Esempio
pubblico astratto classe PrivilegedBlockLimit {

pubblico PrivilegedBlockLimit(URL[] urls) {
questo .urls = urls;
}

pubblico annullare readResource() {
AccessController.doPrivileged(new PrivilegedAction() {
pubblico Oggetto eseguire() {
System.loadLibrary("resourcelibrary");//$NON-NLS-1$
per (indice int = 0; indice < urls.length; indice++) {
stato int = getStatusAfterLoad(urls[indice]);
if (stato == STATUS_ERR) {
lanciare nuova UnsupportedOperationException();
} else {
processStatus(status,urls[indice]);
}
}
restituire null;
}
});

}

protetto astratto int getStatusAfterLoad(URL url);
protetto astratto annullare processStatus(int status, URL url) tiri UnsupportedOperationException;

privato URL[] urls = nullo;
protetto statico finale int STATUS_ERR = -1;
}

}
Soluzione
Ridurre le dimensioni del blocco privilegiato.
pubblico astratto classe PrivilegedBlockLimit {

pubblico PrivilegedBlockLimit(URL[] urls) {
questo .urls = urls;
}

pubblico annullare readResource() {
AccessController.doPrivileged(new PrivilegedAction() {
pubblico Oggetto eseguire() {
System.loadLibrary("resourcelibrary");//$NON-NLS-1$
restituire null;
}
});
per (indice int = 0; indice < urls.length; indice++) {
stato int = getStatusAfterLoad(urls[indice]);
if (stato == STATUS_ERR) {
lanciare nuova UnsupportedOperationException();
} else {
processStatus(status,urls[indice]);
}
}
}

protetto astratto int getStatusAfterLoad(URL url);
protetto astratto annullare processStatus(int status, URL url) tiri UnsupportedOperationException;

privato URL[] urls = nullo;
protetto statico finale int STATUS_ERR = -1;
}