调用属于包的main()

时间:2012-03-26 08:49:47

标签: java noclassdeffounderror

我无法理解这个错误,方案是:

这是目录结构:

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

这个问题的解决方案可能是什么,谢谢。

2 个答案:

答案 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