我无法从CMD运行.class文件,我似乎无法找到解决错误消息的方法。我的环境变量设置为C:\ program files(x86)\ java \ jdk1.7.0_45 \ bin,java和javac都是版本1.7.0_45,我在本地目录中运行代码:
C:\Java\hfjavafinalsamples\chap01> javac PhraseOMatic.java
C:\Java\hfjavafinalsamples\chap01> java -classpath . PhraseOMatic
Exception in thread "main" java.lang.NoClassDefFoundError: PhraseOMatic (wrong n
ame: chap01/PhraseOMatic)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
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:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
C:\Java\hfjavafinalsamples\chap01>
答案 0 :(得分:3)
该类的完全限定名称为chap01.PhraseOMatic
,因为其简称为PhraseOMatic
,其包为chap01
。
java命令需要一个完全限定的名称。根据其类路径和此完全限定名称,它将查找.class文件。所以,如果你的类路径是'。'完全限定名称为chap01.PhraseOMatic
,它会查找./chap01/PhraseOMatic
。所以这不起作用,因为你已经在chap01文件夹包里了。
因此,类路径应为..
,或者(更好)您应该在hfjavafinalsamples文件夹中运行您的应用程序:
C:\Java\hfjavafinalsamples> java -classpath . chap01.PhraseOMatic
此外,您不应将源文件(.java)和编译文件(.class)放在同一文件夹树中。创建包含源树的src
文件夹,以及包含已编译类树的classes
文件。并使用javac的-d classes
选项将类编译到classes文件夹中。