gpt4 book ai didi

java - Java NoClassDefFoundError(名称错误)

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:37 25 4
gpt4 key购买 nike

我在这里见过这样的问题,但我找不到适合我情况的问题,如果这是一个过时的问题,我很抱歉。

我有一个类 P,它是位于 ~/JavaClasses/myname/utils 中的包 myname.utils 的一部分。我有另一个类 Printing,它没有声明为任何包的一部分,但位于 ~/JavaClasses/myname/practice 中。类打印导入类 P。这两个类都可以从 ~/JavaClasses 目录编译良好。但是,当我尝试像这样运行已编译的类 Printing

~/JavaClasses$ java myname/practice/Printing

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: myname/practice/Printing (wrong name: Printing)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

最佳答案

错误myname.utils.P类无关,但它发生的原因是Printing类没有包定义。这意味着该类的真正全名是 Printing,但是如果您从 ~/JavaClasses 文件夹启动 java 命令,则准确地说 Printing 类的全名是 myname.practice.Printing

您有 2 个选项可以解决此问题:

1)在 Printing 类中声明 myname.practice 包(我建议使用这个)

2) 将 myname.practice 文件夹添加到类路径中,如下所示:

~/JavaClasses$ java -cp myname.practice:. Printing

. 代表当前目录,它是必要的,这样您仍然可以引用 ~/JavaClasses 文件夹中的 myname.utils.P 类。

旁注。在编译时没有错误,因为在启动 javac 时可能没有指定类路径,因此使用的是当前文件夹。这样,每个类都可以毫无问题地引用 myname.utils.P,甚至可以通过打印来引用。

关于java - Java NoClassDefFoundError(名称错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370822/

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