Chyba NoClassDefFoundError

NoClassDefFoundError je najčastejšou chybou pri vývoji v Jave. V každom prípade sa pozrime na to, prečo k tomu dochádza a čo robiť, aby sme to vyriešili

Chyba NoClassDefFoundError v jazyku Java nastáva vtedy, keď virtuálny stroj Java nemôže počas behu nájsť konkrétnu triedu, ktorá bola k dispozícii v čase kompilácie. Napríklad, ak máme volanie metódy z triedy alebo prístup k niektorému statickému členovi triedy a táto trieda nie je počas behu k dispozícii, JVM vygeneruje chybu NoClassDefFoundError.

Rozdiel medzi java.lang.NoClassDefFoundError a ClassNotFoundException v jazyku Java

Výnimka ClassNotFoundException vzniká, keď sa JVM pokúša načítať triedu počas behu, t. j. počas behu zadáte názov triedy a potom sa ju JVM pokúsi načítať a ak sa trieda nenájde, vygeneruje výnimku java.lang.ClassNotFoundException.

Zatiaľ čo v prípade NoClassDefFoundError bola problémová trieda prítomná v čase kompilácie, a preto sa program úspešne skompiloval, ale z nejakého dôvodu nie je dostupný v čase behu.

Pokračujme v riešení chyby java.lang.NoClassDefFoundError

Musíme pridať NoClassDefFoundError do Classpath alebo skontrolovať, prečo nie je k dispozícii v Classpath. Dôvodov môže byť niekoľko, napríklad:

  • Trieda nie je dostupná v Java Classpath.
  • Je možné, že spúšťate program s jar a trieda nie je definovaná v atribúte ClassPath.
  • Každý spúšťací skript prepíše premennú prostredia Classpath. Keďže NoClassDefFoundError je podtriedou java.lang.LinkageError, môže sa objaviť aj vtedy, ak knižnica nemusí byť k dispozícii.
  • Skontrolujte, či sa v súbore denníka nenachádza chyba java.lang.ExceptionInInitializerError. NoClassDefFoundError z dôvodu zlyhania inicializácie je pomerne častá.
  • Ak pracujete v prostredí J2EE, zobrazenie triedy medzi viacerými Classloadermi môže tiež spôsobiť chybu java.lang.NoClassDefFoundError.

Nahrávač tried v jazyku Java

Zopakujme si, že nahrávač tried používa pri svojej činnosti tri základné princípy: delegovanie, viditeľnosť a jedinečnosť.

  • Delegovanie znamená, že každá požiadavka na načítanie triedy je delegovaná na nadradený zavádzač tried.
  • Viditeľnosť znamená schopnosť nájsť triedy načítané zavádzačom tried: všetky podradené zavádzače tried môžu vidieť triedy načítané rodičovským zavádzačom tried, ale rodičovský zavádzač tried nemôže vidieť triedu načítanú podradeným zavádzačom tried.
  • Jedinečnosť zabezpečuje, že trieda načítaná nadradeným zavádzačom tried nebude znovu načítaná podradeným zavádzačom tried.

Každá inštancia zavádzača tried má priradený nadradený zavádzač tried. Predpokladajme, že zavádzač tried vašej aplikácie potrebuje zaviesť triedu A. Zavádzač tried vašej aplikácie sa najprv pokúsi delegovať hľadanie triedy A na svoj nadradený zavádzač tried a až potom sa ju pokúsi zaviesť sám. Môžete prejsť dlhým reťazcom nadradených zavádzačov, až kým sa nedostanete k úvodnému zavádzaču virtuálneho stroja Java.

V čom je teda problém? Ak je trieda A nájdená a načítaná niektorým nadradeným zavádzačom, znamená to, že podradený zavádzač ju už nenačíta, čo je pravdepodobne to, na čo čakáte, čo vedie k chybe NoClassDefFoundError.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite so náš ebook teraz výnimočne zdarma!!!

Cicso Lab v Bratislave

Mohlo by vás zaujímať:

Java TeamLeader Pripravený pomôcť.

Java TeamLeader

Online kurz programovania v Jave

Školenie-java-pre-začíatočnikov

Programovanie nie je ťažké! Kódenie vlastných appiek v nástroji Java je veľká zábava. Do konca leta programujete vy sami alebo vaše bystré deti svoje prvé appky

Ako začať programovať?

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí. Stiahnite so náš ebook teraz výnimočne zdarma!!!

Ovládnite GIT a GitHub z príkazového riadku ako hacker

Školenie-java-pre-začíatočnikov

Vyhraďte si deň-dva a naučte sa pracovať s GITom tak, že vám vaši kolegovia budú pozerať cez rameno, ako to do pekla robíte... od úplných základov cez praktické príklady.

7dňová výzva programovania Webu

7dňová výzva programovania Webu

Budete vedieť vytvárať pekné weby koncom budúceho týždňa? Áno, dá sa to! Radi vám s tým pomôžeme. Stačí prijať Sedemdňovú výzvu a rezervovať si tento kurz