Подтвердить что ты не робот

Получение "неправильного имени" NoClassDefFoundError при выполнении программы Java из командной строки

У меня проблема при попытке выполнить мое приложение Java. Всякий раз, когда я пытаюсь выполнить программу с помощью команды

java ProgAudioJ

Я получаю эту ошибку:

Exception in thread "main"
java.lang.NoClassDefFoundError: ProgAudioJ (wrong name: es_2011/ProgAudioJ)
        at java.lang.ClassLoader.defineClass1(NativeMethod)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(NativeMethod)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: ProgAudioJ.  Program will exit.

Если я удалю из своего кода:

package es_2011;

Все работает отлично. Как решить проблему?

4b9b3361

Ответ 1

Потому что я нашел эти ответы неясными, вот что вам нужно сделать. Во-первых, если вы упаковываете свой код (IE у ваших классов есть ключевое слово package вверху), скомпилированные классы должны быть в каталоге с тем же именем, что и объявление вашего пакета в коде. После того, как вы скомпилировали свои классы, вам нужно переместить каталог, когда вы используете java-команду, а - имя пакета. Например, если ваш код существует в /myFolder/myPackage/, а ваш класс начинается с package myPackage (обратите внимание, что каталог и пакет имеют одинаковое имя), вы должны сделать следующее (linux/osx):

cd /myFolder/myPackage

javac MyClass.java 

cd ..

java myPackage.MyClass

Изменить - позднее изменение, чтобы прояснить то, что я вижу, люди путаются. В приведенном выше примере пакет является только одним глубоким, что означает его просто myPackage. Если у вас код имеет больший пакет, например

package com.somedomain.someproject;

вам нужно будет выполнить команду java из каталога, содержащего корневой каталог для этого пакета. Например, если ваш скомпилированный код находится в myCode/com/somedomain/someproject/MyMainClass.class, тогда вы выполните команду java из папки myCode, как это (Еще раз обратите внимание, что структура каталогов такая же, как и пакет декларация):

cd /myCode
java com.somedomain.someproject.MyMainClass

Ответ 2

Попробуйте использовать:

java es_2011.ProgAudioJ

(вместо java ProgAudioJ).

Я делаю некоторые предположения здесь о вашем текущем рабочем каталоге и вашем CLASSPATH. Если вы можете предоставить информацию о команде, которую вы используете (например, какой каталог вы находитесь, где находится файл класса и т.д.), Мы можем помочь вам более эффективно.

Ответ 3

Попробуйте это (скомпилируйте и запустите):

папка

2011-02-10  00:30    <DIR>          .
2011-02-10  00:30    <DIR>          ..
2011-02-10  00:27                58 es_2011

javac es_2011/ProgAudioJ

java es_2011.ProgAudioJ

Ответ 4

Здесь четко сказано:

java.lang.NoClassDefFoundError: ProgAudioJ (неправильное имя: es_2011/ProgAudioJ)

Если вы хотите поместить класс в пакет (*), исходный код должен быть помещен в соответствующий каталог, например,

src/Main.java <- root package (no declaration)
src/es_2011/ProgAudioJ.java <- package es_2011;

(*) Вы должны делать это всегда, за исключением крошечных отбросов и, возможно, для основного класса.

Ответ 5

Причина, по которой она работает при удалении package es_2011
заключается в том, что вы изменяете, как компилятор упаковывает и эффективно находит файл.

У меня была та же проблема - и сообщение об ошибке wrong name: действительно указывает вам на ответ. Вы используете неправильное имя "ProgAudioJ" для запуска файла .class. Он был упакован как

es_2011/ProgAudioJ

Чтобы запустить его - вам нужно либо переместиться вверх по каталогу:

Если вы находитесь здесь: (Windows)   src\es_2011\
переехать в    src\

Затем запустите строку:

java es_2011.ProgAudioJ

Это говорит компилятору искать ProgAudioJ, который находится в пакете es_2011. Для стандартной установки это будет основано на папках, поэтому сначала будет искать папку es_2011, а затем имя файла .class, который вы хотите запустить (ProgAudio).

Ответ 6

Попробуйте это,

  • Скомпилируйте свой класс, используя следующую команду:

    $ javac ProgAudioJ.java -d .
    
  • Запустите приложение по команде

    $ java es_2011.ProgAudioJ