Java 从URLClassLoader请求资源会导致;“压缩文件已关闭”;例外
我正在使用一个应用程序,它通过Java 从URLClassLoader请求资源会导致;“压缩文件已关闭”;例外,java,url,classloader,Java,Url,Classloader,我正在使用一个应用程序,它通过getResourceAsStream方法定期从URLClassLoader请求资源。对于某些资源(不存在),这会导致以下异常,而不是返回null: java.lang.IllegalStateException: zip file closed at java.util.zip.ZipFile.ensureOpen(ZipFile.java:669) at java.util.zip.ZipFile.getEntry(ZipFile
getResourceAsStream
方法定期从URLClassLoader
请求资源。对于某些资源(不存在),这会导致以下异常,而不是返回null
:
java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:669)
at java.util.zip.ZipFile.getEntry(ZipFile.java:309)
at java.util.jar.JarFile.getEntry(JarFile.java:240)
at sun.net.www.protocol.jar.URLJarFile.getEntry(URLJarFile.java:128)
at java.util.jar.JarFile.getJarEntry(JarFile.java:223)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:1005)
at sun.misc.URLClassPath$JarLoader.findResource(URLClassPath.java:983)
at sun.misc.URLClassPath.findResource(URLClassPath.java:188)
at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
at java.lang.ClassLoader.getResource(ClassLoader.java:1093)
at java.lang.ClassLoader.getResource(ClassLoader.java:1088)
at java.lang.ClassLoader.getResource(ClassLoader.java:1088)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1304)
正如Google所披露的,这个错误似乎相当常见,经常被提及的原因是一个损坏的jar文件,在我的例子中,这是不太可能的。这可能是虚拟机中的一个bug,还是有其他已知但未记录的原因导致这种情况发生?调用getResourceAsStream
方法时,似乎永远不会出现这种情况