我无法理解这个错误,方案是:
这是目录结构:
classes/
root/
pkgmain/Cmain.class
pkg1/C1.class
pkg2/C2.class
问题是当我尝试从以下路径运行Cmain文件(main()在此文件中时),我收到错误:
C:\Ravi\MakingJarFile\classes\root\pkgmain>java Cmain
Exception in thread "main" java.lang.NoClassDefFoundError: Cmain (wrong name: root/pkgmain/Cmain)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Cmain. Program will exit.**
这个问题的解决方案可能是什么,谢谢。
答案 0 :(得分:4)
您需要提供完全限定的类名,并从 root 目录中执行(或将该目录放在类路径中):
C:\Ravi\MakingJarFile\classes> java root.pkgmain.Cmain
或
C:\Anywhere> java -cp C:\Ravi\MakingJarFile\classes root.pkgmain.Cmain
你告诉java
命令一个类的全名,这就是它正在寻找的东西。当找到相关的类文件时,它将检查其中的类确实是否具有该完全限定的名称
答案 1 :(得分:0)
您必须指定类的完整路径 - 否则java无法找到Class。
java root.pkgmain.Cmain