Не могу решить Java NoClassDefFoundError, но все выглядит правильно ... есть идеи? - PullRequest
0 голосов
/ 12 ноября 2010

заранее извините, если я не предоставил достаточно информации или мне что-то неясно, это мой первый опыт использования файлов .bat и .config.

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

semaine.components = \
eu.semaine.examples.swimmer.SwimmerDisplay| \

система работает правильно и указанные компоненты инициализированы.

Я добавляю свой собственный компонент в список существующих компонентов, используя следующий код:

eu.semaine.examples.TestPackage.MyTest| \

однако я получаю следующую ошибку:

java.lang.NoClassDefFoundError: eu / semaine / examples / TestPackage / MyTest (неправильное имя: TestPackage / MyTest)

Я осмотрелся вокруг, и мне кажется, что я не делаю ничего из того, что обычно вызывает эту ошибку, например имя моего класса соответствует имени файла, в котором оно хранится (открытый класс MyTest хранится в MyTest.java), MyTest находится в пакете TestPackage, а папка в структуре файла также называется TestPackage.

Любые идеи или советы будут с благодарностью.

Ответы [ 3 ]

2 голосов
/ 12 ноября 2010

Вы запросили

eu.semaine.examples.TestPackage.MyTest

но скажите, что вы поместили файл в каталог с именем TestPackage.

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

eu
  semaine
    examples
        swimmer
           SwimmerDisplay

говоря, что eu.semaine.examples.TestPackage.MyTest вы говорите, что пакет будет "eu.semaine.examples.TestPackage", а иерархия каталогов теперь будет

eu
  semaine
    examples
        swimmer
           SwimmerDisplay.class
        TestPackage
           MyTest.class

Я думаю, что вы намерены вместо этого:

eu
  semaine
    examples
        swimmer
           SwimmerDisplay.class
TestPackage
  MyTest.class

и сказать, что класс просто

TestPackage.MyTest

не

eu.semaine.examples.TestPackage.MyTest

[Попутно я согласен, что обычным соглашением является не использование заглавных букв в именах пакетов, но я не верю, что Java выводит и семантически из заглавных букв.]

0 голосов
/ 12 ноября 2010

Соглашение об именах гласит, что все имена пакетов должны быть в нижнем регистре, см. http://download.oracle.com/javase/tutorial/java/package/namingpkgs.html.

Полагаю, jvm думает, что TestPackage - это класс, а MyTest - внутренний класс.

0 голосов
/ 12 ноября 2010

Похоже, ваш класс не находится в пути к классам приложения, когда он запущен. Вы упоминаете .bat файлы. Если вы так запускаете приложение, оно должно содержать раздел, в котором собран путь к классам. Он должен содержать родительскую папку папки TestPackage, чтобы JVM знала, где найти файл класса.

...