无法执行java类java.lang.NoClassDefFoundError:

时间:2014-01-23 21:37:42

标签: java

我是java的新手。 我创建了一个名为HelloWorld.java的文件;

package tp;

 /**
 *
 * @author Utilisateur
 */
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("HelloWorld works!");
    }
}

通过执行以下命令编译它:javac HelloWorld.java与HelloWorld.java位于同一文件夹中; 执行代码:java -cp。与HelloWorld.java在同一文件夹中的HelloWorld位于。

但我收到此错误消息

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: javaTp/HelloWorld)
    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)

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

包裹名称是您的问题。

Java使用已编译的类文件夹中的目录来表示包。因此,当您的HelloWorld类将自己定义为包'tp'时,您需要执行以下操作之一:

你可以运行它(使用现有的类):

> java -cp . tp.HelloWorld

或者您可以从类的顶部删除包声明,重新编译并运行:

> java -cp . HelloWorld

答案 1 :(得分:1)

因为您声明了包tp,所以Java希望您的HelloWorld.class文件存在于./tp目录中。

通常,Java项目将嵌套目录结构编译为镜像目录结构,例如:

src/
  tp/
    HelloWorld.java
classes/
  tp/
    HelloWorld.class

答案 2 :(得分:0)

您需要使用全名:java tp.HelloWorld