Получение «неправильного имени» 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; 

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

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

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

 java es_2011.ProgAudioJ 

(вместо java ProgAudioJ ).

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

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

реж

 2011-02-10 00:30  . 2011-02-10 00:30  .. 2011-02-10 00:27 58 es_2011 

javac es_2011 / ProgAudioJ

java es_2011.ProgAudioJ

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

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

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

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

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

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

  1. Скомпилируйте свой class, используя команду ниже

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

     $ java es_2011.ProgAudioJ 

Причина, по которой он работает, когда вы удаляете
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).

  • исключение в streamе 'main' java.lang.NoClassDefFoundError:
  • Gson NoClassDefFoundError после обновления ADT и SDK Tools до v17
  • java.lang.NoClassDefFoundError: org / apache / juli / logging / LogFactory
  • Компиляция и работа с JavaFX 2.1
  • NoClassDefFoundError ниже SDK 21
  • NoClassDefFoundError для кода в библиотеке Java на Android
  • Android java.lang.NoClassDefFoundError
  • Давайте будем гением компьютера.