繁体   English   中英

在具有main()的类中定义包名称时,出现NoClassDefFoundError

[英]NoClassDefFoundError when a package name is defined in the class that has main()

目录结构:

ClassOne.java
ClassOne.class
/dir
    ClassTwo.java
    ClassTwo.class

我纯粹是用这个终端。 我都使用javac进行编译,以生成类文件。

ClassOne.java

import dir.ClassTwo;

public class ClassOne{

    public static void main(String[] args){
        ClassTwo two = new ClassTwo();
        two.printIt();
    }
}

ClassTwo.java

package dir;

public class ClassTwo {
    void printIt() {
        System.out.println("I am class two!");
    }

    public static void main(String[] args){
        System.out.println("Hello");
    }
}

运行ClassOne.java可以按预期工作(由于ClassTwo.printIt()设置为默认值,导致编译器错误)。 然而,什么难倒我是NoClassDefFoundError ,我得到的,当我跑ClassTwo。

添加package dir;时,我注意到了该错误package dir; 顶部的语句-如果没有它,ClassTwo会按预期运行,但ClassOne会出错。

这是我使用package dir;运行ClassTwo时遇到的错误package dir; 定义:

Exception in thread "main" java.lang.NoClassDefFoundError: ClassTwo (wrong name: dir/ClassTwo)
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
  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:423)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)

为什么会这样呢?

因为包名称是类名称的一部分。 上一个文件夹并运行类似

java -cp . dir.ClassTwo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM