Я нашел его в источнике JDK.
CacheEntry.java, 9-й PrivilegedExceptionAction.run:
public Object run() throws IOException {
JarFile jar = null;
RandomAccessFile raf = null;
//reset lengths as they will be updated
//and they could be stale (e.g. if we are upgrading from old index file)
section2Length = 0;
section3Length = 0;
section4Length = 0;
section4Pre15Length = 0;
section4CertsLength = 0;
section4SignersLength = 0;
section5Length = 0;
reducedManifestLength = 0;
reducedManifest2Length = 0;
try {
raf = openLockIndexFile("rw", false);
// output index file contents to disk
//mandatory header first (will write it again later on)
byte header[] = prepareHeader();
raf.write(header);
ByteArrayOutputStream bout = new ByteArrayOutputStream(1000);
DataOutputStream out = new DataOutputStream(bout);
out.writeUTF(getVersion() != null ? getVersion() : "");
out.writeUTF(getURL());
out.writeUTF(getNamespaceID());
// write out resource codebase ip address if available
InetAddress ina = null;
// get the ip address of the resource codebase
String codebase = "";
if (url != null && url.equals("") == false) {
URL u = new URL(url);
String host = u.getHost();
ina = Cache.getHostIP(host);
if (ina != null) {
codebase = ina.getHostAddress();
}
}
out.writeUTF(codebase);
// write out HTTP/HTTPS header if available
writeHeaders(out);
out.close();
bout.close();
section2Length = bout.size();
raf.write(bout.toByteArray());
if (incomplete == 0) {
// save sections 3 and 4 (JAR only)
if (isJarFile(url)) {
jar = new JarFile(new File(filename));
CachedManifest manifest = new CachedManifest(jar);
//will update section3Length and section4Length internally
writeManifest(raf, jar, manifest, contentType, dd);
manifest.postprocess(); //need to do this explicilty
updateManifestRefs(manifest);
jar.close();
}
// this entry just got downloaded, so mark it as update check done
DownloadEngine.addToUpdateCheckDoneList(url);
// add this entry to the cleanup thread loaded resource list
Cache.addToCleanupThreadLoadedResourceList(url);
setBusy(0);
setIncomplete(0);
updateBlacklistValidation();
updateTrustedLibrariesValidation();
doUpdateHeader(raf);
//whenether this is jar or not we do not need to try read
//manifest or certificates again
doneReadManifest = true;
doneReadCerts = true;
doneReadSigners = true;
}
} catch (Exception e) {
Trace.ignoredException(e);
// close file before trying to delete them
// set raf/jar to null after closing, so they won't be closed
// again in the finally block
if (raf != null) {
raf.close();
raf = null;
}
if (jar != null) {
jar.close();
jar = null;
}
Cache.removeCacheEntry(CacheEntry.this);
if (e instanceof JARSigningException) {
throw (JARSigningException) e;
}
if (e instanceof java.util.zip.ZipException) {
throw new JARSigningException(new URL(url), version,
JARSigningException.BAD_SIGNING, e);
}
throw new IOException(e.getMessage());
} finally {
if (raf != null) {
raf.close();
}
if (jar != null) {
jar.close();
}
Cache.cleanup();
}
return null;
}
}
Я думал, что вы не увидели настоящую ошибку, потому что IOException не сделалоберните это.Причина исключения регистрируется в консоли Java, и я полагаю, что она будет видна.Но если это не так, я бы посоветовал вам получить исходные коды OpenJDK из http://download.java.net/openjdk/jdk6/ и попытаться отладить этот класс (CacheEntry.java:1681).К сожалению, JDK был создан без отладочной информации, но вы можете установить точки останова в методах и просмотреть свойства объекта с помощью отладчика.