java.lang.ClassFormatError
(2015-10-15 11:27:10)
标签:
编译文件容器 |
今天没事的时候,突然看到JVM内部机制时,想起一个问题,那就是对一个在我本地编译好的.class文件,打开它的内容后,对其进行任意地修改,发现原本正确编译、执行的class会报出以下两个错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Truncated class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown
Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown
Source)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Extra bytes at the end of
class file Test
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown
Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown
Source)
前面第一个错误是我将class文件删除一部分字节码代执行Java Test命令产生的,第二个则是我在class文件后随意加了一连串的字节码产生的,不过这时会可以通过 class file Test 这个提示发现是我的Test.class这个文件被改变而造成这个错误的。由此,如果在真正的项目开发中出现java.lang.ClassFormatError这个异常,多半就是容器(如tomcat中)class文件出现了问题,如:编译出了有问题的class文件等原因,此时可以删除老的class文件,让容器重新编译。
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Truncated class file
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Extra bytes at the end of
前面第一个错误是我将class文件删除一部分字节码代执行Java Test命令产生的,第二个则是我在class文件后随意加了一连串的字节码产生的,不过这时会可以通过 class file Test 这个提示发现是我的Test.class这个文件被改变而造成这个错误的。由此,如果在真正的项目开发中出现java.lang.ClassFormatError这个异常,多半就是容器(如tomcat中)class文件出现了问题,如:编译出了有问题的class文件等原因,此时可以删除老的class文件,让容器重新编译。
前一篇:对六年从业经历的反思、总结

加载中…