Вызов main (), принадлежащего пакету - PullRequest
0 голосов
/ 26 марта 2012

Я не мог понять эту ошибку, сценарий:

Это структура каталогов:

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 ]

4 голосов
/ 26 марта 2012

Вам необходимо предоставить полное имя класса и сделать это из каталога root (или поместить этот каталог в путь к классам):

C:\Ravi\MakingJarFile\classes> java root.pkgmain.Cmain

или

C:\Anywhere> java -cp C:\Ravi\MakingJarFile\classes root.pkgmain.Cmain

Вы указываете команде java полное имя класса, и это то, что он ищет.Когда он находит соответствующий файл класса, он проверяет, действительно ли класс в нем имеет это полное имя

0 голосов
/ 26 марта 2012

Вы должны указать полный путь к классу, иначе java не сможет найти класс.

java root.pkgmain.Cmain
...