gpt4 book ai didi

java - 在 java 中遇到 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-29 10:11:49 25 4
gpt4 key购买 nike

我在 Java 中运行时遇到错误:

// Test.java
public class Test {
public static void main(String [] args) throws IOException {
String a = "123";
a = a + "456";
System.out.println(a);
}
}

通过输入这些命令:

javac Test.java
java Test

它报告说:

Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: Test
at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib64/libgcj.so.5.0.0)
at java.lang.Class.initializeClass() (/usr/lib64/libgcj.so.5.0.0)
at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib64/libgcj.so.5.0.0)
at gnu.gcj.runtime.FirstThread.run() (/usr/lib64/libgcj.so.5.0.0)
at _Jv_ThreadRun(java.lang.Thread) (/usr/lib64/libgcj.so.5.0.0)
at _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib64/libgcj.so.5.0.0)
at __gcj_personality_v0 (/home/users/haotianyi/tr/java.version=1.4.2)
at __libc_start_main (/lib64/tls/libc-2.3.4.so)
at _Jv_RegisterClasses (/home/users/haotianyi/tr/java.version=1.4.2)
Caused by: java.lang.ClassNotFoundException: java.lang.StringBuilder not found in [file:/usr/share/java/libgcj-3.4.5.jar, file:./, core:/]
at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib64/libgcj.so.5.0.0)
at gnu.gcj.runtime.VMClassLoader.findClass(java.lang.String) (/usr/lib64/libgcj.so.5.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib64/libgcj.so.5.0.0)
at _Jv_FindClass(_Jv_Utf8Const, java.lang.ClassLoader) (/usr/lib64/libgcj.so.5.0.0)
at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib64/libgcj.so.5.0.0)
at _Jv_BytecodeVerifier.verify_instructions_0() (/usr/lib64/libgcj.so.5.0.0)
at _Jv_VerifyMethod(_Jv_InterpMethod) (/usr/lib64/libgcj.so.5.0.0)
at _Jv_PrepareClass(java.lang.Class) (/usr/lib64/libgcj.so.5.0.0)
at _Jv_WaitForState(java.lang.Class, int) (/usr/lib64/libgcj.so.5.0.0)
at java.lang.VMClassLoader.linkClass0(java.lang.Class) (/usr/lib64/libgcj.so.5.0.0)
at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib64/libgcj.so.5.0.0)
...8 more

但是当我删除 a = a + "456"; 行时程序运行正常,即,

// Test.java
public class Test {
public static void main(String [] args) throws IOException {
String a = "123";
// a = a + "456";
System.out.println(a);
}
}

请问问题出在哪里,如何解决?

最佳答案

问题是您使用的编译器来自 Java 5 或更高版本,因此它使用 StringBuilder 而不是 StringBuffer - 但是您使用的执行环境似乎是 Java 1.4.2,其中不包括 StringBuilder

请注意,Java 1.4.2 也是古老的。我建议您将 JDK 和 JRE 都升级到最新版本(最好直接升级到 Java 8)——这将解决您的问题,并且意味着您没有在不受支持的版本上运行,该版本可能存在尚未发现的安全漏洞因为太旧了,所以打了补丁。 (按照这些思路,您真的需要使用 GCJ 吗?如果可以的话,我会坚持使用使用更广泛的 Java 环境之一。)

关于java - 在 java 中遇到 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31130857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com