接上文
31.“Could Not Java ”
当我们尝试调用带有错误参数的Java代码时,通常会产生此Java错误消息:
<pre class="brush: java; gutter: false; first-line: 1 hljs sql" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">Error: Could not create the Java Virtual MachineError: A fatal exception has occurred. Program will exit.</pre>
这通常是由于代码中的声明存在错误或为其分配适当的内存而引起的。
32.“class file wrong class”
当Java代码尝试在错误的目录中寻找类文件时java常用加密解密算法,就会出现“class file wrong class”的问题,导致类似于以下内容的错误消息:
<pre class="brush: bash; gutter: false; first-line: 1 hljs ruby" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">MyTest.java:10: cannot access MyStruct
bad class file: D:JavatestMyStruct.java file does not contain class MyStruct Please remove or make sure it appears in the correct subdirectory of the classpath.
MyStruct ms = new MyStruct();</pre>
要修复此错误,以下这些提示可以提供帮助:
确保源文件的名称和类的名称匹配——包括大小写。
检查软件包语句是否正确或是否缺失。
确保源文件位于正确的目录中。
33.“”
“”消息指示了Java代码正在尝试将对象转换为错误的类。在来自Java of Day的这个例子中,运行以下程序:
<pre class="brush: java; gutter: false; first-line: 1 hljs" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">package com;class A{ int i = 10;
}class B extends A{ int j = 20;
}class C extends B{ int k = 30;
}public class ClassCastExceptionDemo{ public static void main(String[] args)
{
A a = new B(); //B type is auto up casted to A type
B b = (B) a; //A type is explicitly down casted to B type.
C c = (C) b; //Here, you will get class cast exception
System.out.println(c.k);
}
re>
导致以下错误:
<pre class="brush: java; gutter: false; first-line: 1 hljs css" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">Exception in thread “main” java.lang.ClassCastException: com.B cannot be cast to com.Cat com.ClassCastExceptionDemo.main(ClassCastExceptionDemo.java:23)</pre>
Java代码将创建一个类和子类的层次结构。为了避免“”错误,请确保新类型属于正确的类或其父类之一。如果使用泛型,则编译代码时可能会捕获这些错误。
34.“”
“”消息指示链接错误,并且发生在类文件不能被读取或解释为类文件的时候。
<pre class="brush: java; gutter: false; first-line: 1 hljs ruby" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/GenerationTypeat java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
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$000(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)</pre>
有若干原因会导致“”错误:
类文件以ASCII模式而不是二进制模式上传。
Web服务器必须以二进制而不是ASCII格式发送类文件。
可能会有一个类路径错误,阻止了代码找到类文件。
如果类被加载两次,那么第二次将导致抛出异常。
正在使用旧版本的Java运行时。
35.“on”
“on”仅在运行时发生——意味着在编译期间有一个类在运行时缺失了。这是一个链接错误。
很像“”,在以下情况下会出现这个问题:
该文件不在正确的目录中。
类的名称必须与文件的名称相同(不包括文件扩展名)。 名称区分大小写。
36.“”
此Java问题发生在静态初始化出错的时候。 当Java代码稍后使用该类时,将发生“”错误。
<pre class="brush: java; gutter: false; first-line: 1 hljs sql" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">java.lang.ExceptionInInitializerError
at org.eclipse.mat.hprof.HprofIndexBuilder.fill(HprofIndexBuilder.java:54)
at org.eclipse.mat.parser.internal.SnapshotFactory.parse(SnapshotFactory.java:193)
at org.eclipse.mat.parser.internal.SnapshotFactory.openSnapshot(SnapshotFactory.java:106)
at com.squareup.leakcanary.HeapAnalyzer.openSnapshot(HeapAnalyzer.java:134)
at com.squareup.leakcanary.HeapAnalyzer.checkForLeak(HeapAnalyzer.java:87)
at com.squareup.leakcanary.internal.HeapAnalyzerService.onHandleIntent(HeapAnalyzerService.java:56)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: java.lang.NullPointerException: in == null
at java.util.Properties.load(Properties.java:246) at org.eclipse.mat.util.MessageUtil.(MessageUtil.java:28) at org.eclipse.mat.util.MessageUtil.(MessageUtil.java:13)
... 10 more</pre>
修复此错误我们需要更多的信息。在代码中使用()可以返回导致错误的异常。
37.“ption”
当长度消息不是8字节的倍数时,那么在解密期间就会抛出“ption”异常。
<pre class="brush: java; gutter: false; first-line: 1 hljs" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">@Overrideprotected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException { try { byte[] encoded = key.getEncoded(); return engineDoFinal(encoded, 0, encoded.length);
} catch (BadPaddingException e) {
IllegalBlockSizeException newE = new IllegalBlockSizeException();
newE.initCause(e); throw newE;
}
re>
“ption”可能是由以下原因引起的:
使用不同的加密和解密算法选项。
要解密的消息可能在传输中被截断或乱码。
38.“”
当使用填充来创建一个消息而不是8字节的倍数时,那么在解密期间可能会出现“”异常。这是出自Stack 的一个例子:
<pre class="brush: java; gutter: false; first-line: 1 hljs css" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">javax.crypto.BadPaddingException: Given final block not properly paddedat com.sun.crypto.provider.SunJCE_f.b(DashoA13..)at com.sun.crypto.provider.SunJCE_f.b(DashoA13..)at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13..)at javax.crypto.Cipher.doFinal(DashoA13..)</pre>
加密数据是二进制的,所以不要尝试将其存储在字符串或在加密期间没有被正确填充的数据中。
39.“”
“”是的一种形式,如果一个在基类在编译子类之后发生变化,那么就会出现此异常。
<pre class="brush: java; gutter: false; first-line: 1 hljs ruby" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing classat 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)
<p>
at java.net.URLClassLoader.access$000(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 java.lang.ClassLoader.loadClassInternal(Unknown Source)
at net.sf.cglib.core.DebuggingClassWriter.toByteArray(DebuggingClassWriter.java:73)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:26)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.(Enhancer.java:69)</pre></p>
出现“”有可能的原因是:
忘记了主方法的静态。
非法使用了legal类。
类被改变了,并且存在通过旧的签名从另一个类到这个类的引用。尝试删除所有类文件并重新编译所有内容。
40.“n”
当具有指定路径名的文件不存在时,将抛出此Java软件错误消息。
<pre class="brush: java; gutter: false; first-line: 1 hljs" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">@Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { if (uri.toString().startsWith(FILE_PROVIDER_PREFIX)) { int m = ParcelFileDescriptor.MODE_READ_ONLY; if (mode.equalsIgnoreCase("rw")) m = ParcelFileDescriptor.MODE_READ_WRITE;
File f = new File(uri.getPath());
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(f, m); return pfd;
} else { throw new FileNotFoundException("Unsupported uri: " + uri.toString());
}
re>
除了没有指定路径名的文件之外,这可能意味着现有文件无法访问。
41.“”
当输入期间意外终止文件或流时,将抛出“”。 以下是抛出异常的一个示例,来自应用程序:
<pre class="brush: java; gutter: false; first-line: 1 hljs" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">import java.io.DataInputStream;import java.io.EOFException;import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class ExceptionExample { public void testMethod1() {
File file = new File("test.txt");
DataInputStream dataInputStream = null; try {
dataInputStream = new DataInputStream(new FileInputStream(file)); while (true) {
dataInputStream.readInt();
}
} catch (EOFException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally { try { if (dataInputStream != null) {
dataInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
<p>
}
}
} public static void main(String[] args) {
ExceptionExample instance1 = new ExceptionExample();
instance1.testMethod1();
}
}</pre></p>
运行上面的程序,将抛出以下异常:
<pre class="brush: java; gutter: false; first-line: 1 hljs css" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">java.io.EOFExceptionat java.io.DataInputStream.readInt(DataInputStream.java:392)at logging.simple.ExceptionExample.testMethod1(ExceptionExample.java:16)at logging.simple.ExceptionExample.main(ExceptionExample.java:36)</pre>
当类尝试在流中读取数据但没有更多数据时,将抛出“”。它也可以发生在和类中。
42.“”
当不支持字符编码时,会抛出此Java软件错误消息。
<pre class="brush: java; gutter: false; first-line: 1 hljs swift" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">public UnsupportedEncodingException()</pre>
正在使用的Java虚拟机可能不支持给定的字符集。
43.“”
“”异常表示创建或访问套接字时出错。
<p><pre class="brush: java; gutter: false; first-line: 1 hljs" style="margin: 15px auto;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-stretch: normal;font-size: 12px;line-height: 20px;font-family: 'courier new';border-width: 1px 1px 1px 4px;border-style: solid;border-color: rgb(221, 221, 221);background-color: rgb(251, 251, 251);">public void init(String contextName, ContextFactory factory) { super.init(contextName, factory);
String periodStr = getAttribute(PERIOD_PROPERTY); if (periodStr != null) { int period = 0; try {
period = Integer.parseInt(periodStr);
} catch (NumberFormatException nfe) {} if (period