当我从Linux命令行运行Java类文件时,为什么会出现NoClassDefFoundError?

时间:2011-08-15 18:36:25

标签: java class compilation

我正在尝试从linux命令行运行test.class文件。我使用生成javac test.java文件的test.class编译了该文件。当我运行命令java test时,它会抛出一个未找到类的异常。我也尝试使用相同的结果指定包名称。这是输出,有人可以帮忙吗?根据谷歌搜索,我相信我的语法是正确的。

[root@localhost usr]# java test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: testJava/test)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: test. Program will exit.

4 个答案:

答案 0 :(得分:8)

您需要使用javac编译.java文件:

  javac MyFile.java

然后使用java

运行该文件
  java MyFile

如果你这样做但它仍然不起作用,那意味着你需要确保文件中的文件和类名具有相同的名称......所以MyFile.java包含

  class MyFile
  {
     // ...
     public static void main(String[] args)
     {
        // ...
     }
     // ...
  }

答案 1 :(得分:4)

使用 来自testJava的父目录的java testJava.test

答案 2 :(得分:1)

假设你的班级是这样的:

package javaTest;

public class test{
    public static void main(String[] a){
        System.out.println("Test");
    }
}

然后编译并运行该文件,基本上就是这样做的:

$ ls
testJava
$ ls testJava
test.java
$ javac testJava/test.java
$ java testJava.test
Test

这意味着您必须使用其完全限定名称来运行该类,该名称包括该类的包名称。您还必须包含该根目录的目录。你的包裹。 (除非您使用-cp标志指定“root”目录。)

答案 3 :(得分:1)

我最初也有问题。

java -cp。测试

试试这个link,我认为它可能对您有帮助。