当我尝试从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)
................
为什么会发生这种情况?
我的环境变量:
CLASSPATH:.;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
我在这里看到过类似的问题,但我无法找到解决问题的方法。 提前谢谢!
答案 0 :(得分:1)
当您的代码所依赖的类文件存在于编译时但在运行时未找到时,会导致这种情况。查找构建时和运行时类路径的差异。
答案 1 :(得分:0)
Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram (wrong name
当JVM在运行时无法找到您的类时,抛出此异常
From C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src
execute " "java java1.MyProgram" –
答案 2 :(得分:0)
使用java
工具时应注意2点:
因此:
java -cp C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin java1.MyProgram
假设编译后存在以下文件:
C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin\java1\MyProgram.class
有关详细信息,请参阅:
答案 3 :(得分:0)
当Java虚拟机没有时,Java中会出现NoClassDefFoundError 能够在运行时找到特定的类 编译时间。例如,如果我们从类或方法调用方法 访问类的任何静态成员,该类不可用 在运行期间,JVM将抛出NoClassDefFoundError。
NoClassDefFoundError的明显原因是Classpath中没有特定的类,所以我们需要将它添加到Classpath中,或者我们需要检查为什么它在Classpath中不可用,如果我们期望它的话。可能有多种原因,如:
Java Classpath中没有类。
您可能正在使用jar命令运行程序,而类是 未在清单文件的ClassPath属性中定义。
任何启动脚本都会覆盖Classpath环境变量。
答案 4 :(得分:0)
尝试这种方式
以管理员身份运行命令提示符,
cd C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src
然后
javac java1/MyProgram.java
然后
java java1.MyProgram
这样可行。