Reputation: 85
I am unable to run .class files from CMD, and I can't seem to find a way to get around the error messages. My environment variable is set to C:\program files (x86)\java\jdk1.7.0_45\bin, both java and javac are version 1.7.0_45 and I am running the code in the local directory:
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>
Upvotes: 1
Views: 2160
Reputation: 691933
The fully qualified name of the class is chap01.PhraseOMatic
, because its simple name is PhraseOMatic
, and its package is chap01
.
The java command expects a fully qualified name. Based on its classpath and on this fully qualified name, it will look for the .class file. So, if your classpath is '.' and the fully qualified name is chap01.PhraseOMatic
, it will look for ./chap01/PhraseOMatic
. So that won't work, since you're already inside the chap01 folder package.
The classpath should thus be ..
, or (better) you should be in the hfjavafinalsamples folder to run your application:
C:\Java\hfjavafinalsamples> java -classpath . chap01.PhraseOMatic
Also, you should not put the source files (.java) and the compiled files (.class) in the same folder tree. Create an src
folder containing the source tree, and a classes
file containing the compiled classes tree. and use the -d classes
option of javac to compile the classes to the classes folder.
Upvotes: 4