0

当我尝试从 DOS 执行以下程序时,我得到以下结果..

以下程序位于 C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src\java1

package java1;

public class MyProgram{

  public static void main(String[] args){
    System.out.println("Rome wasn’t burned in a day!");
  }
}

javac MyProgram.java 工作正常

java MyProgram给出以下内容:

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram (wrong name  

: java1/MyProgram)

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) ......

为什么会这样??

我的环境变量:

类路径:.;C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip;C:\Program Files\Java\jdk1.7.0_05\bin

小路:C:\Program Files\Java\jdk1.7.0_05\bin

JAVA_HOME:C:\Program Files\Java\jdk1.7.0_05

我在这里看到了类似的问题,但我找不到解决问题的方法。先感谢您!

4

5 回答 5

1

当您的代码依赖于一个类文件并且它在编译时存在但在运行时找不到时会导致这种情况。寻找构建时间和运行时类路径的差异。

参考这个链接

于 2013-07-25T06:26:54.410 回答
0
Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram (wrong name

当 JVM 在运行时无法找到您的类时,将引发此异常

From C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src 

execute " "java java1.MyProgram" –
于 2013-07-25T06:27:09.730 回答
0

java使用工具时应牢记2点:

  1. 将类添加到类路径。
  2. 使用要运行的类的完全限定名称。

因此:

java -cp C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin java1.MyProgram

假设编译后存在以下文件:

C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin\java1\MyProgram.class

有关详细信息,请参阅:

于 2013-07-25T06:34:12.680 回答
0

当 Java 虚拟机无法在运行时找到在编译期间可用的特定类时,Java 中的 NoClassDefFoundError 就会出现。例如,如果我们有一个类的方法调用或访问一个类的任何静态成员,并且该类在运行时不可用,那么 JVM 将抛出 NoClassDefFoundError。

NoClassDefFoundError 的明显原因是特定类在 Classpath 中不可用,因此我们需要将其添加到 Classpath 中,或者如果我们期望它在 Classpath 中不可用,我们需要检查它为什么不可用。可能有多种原因,例如:

  1. 类在 Java 类路径中不可用。

  2. 您可能正在使用 jar 命令运行程序,并且清单文件的 ClassPath 属性中未定义类。

  3. 任何启动脚本都会覆盖 Classpath 环境变量。

于 2013-07-25T06:39:00.920 回答
0

以这种方式尝试

以管理员身份运行命令提示符,并且

cd C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src

然后

javac java1/MyProgram.java

然后

java java1.MyProgram

这将起作用。

于 2013-07-25T06:40:26.657 回答