Preskoči na glavno vsebino

Chyba: class java.lang.StackOverflowError

Pri práci s dokladom (napr. pri vložení položky z cenníka) dôjde k pádu operácie s chybou: java.lang.StackOverflowError

Avtor: Petr Pech

Ako sa problém prejavuje

Pri práci s dokladom (napr. pri vložení položky z cenníka) dôjde k pádu operácie s chybou: java.lang.StackOverflowError

Čo chyba znamená

Táto chyba znamená, že došlo k príliš hlbokému reťazcu volaní metód, ktorý viedol k vyčerpaniu zásobníka (stacku).

K tomu môže dôjsť napríklad:

  • pri cyklickej väzbe v dátach (nekonečné spracovanie)

  • pri opakovanom vyvolávaní udalostí v rozhraní (GUI)

  • alebo všeobecne pri nekontrolovanom opakovaní operácie

Príklady


1. Poplatky v cenníku

V logu možno sledovať:

cz.winstrom.service.dok.impl.PoplatkyHelper.refreshPoplatkyByCenik(PoplatkyHelper.java:100)
cz.winstrom.service.dok.impl.PolDoklBLImpl.fillPolDoklCenikem(PolDoklBLImpl.java:7067)
cz.winstrom.service.dok.impl.PoplatkyHelper.refreshPoplatkyByCenik(PoplatkyHelper.java:100)
cz.winstrom.service.dok.impl.PolDoklBLImpl.fillPolDoklCenikem(PolDoklBLImpl.java:7067)
  • položka má priradený poplatok

  • tento poplatok má nastavený ďalší poplatok

  • a ten odkazuje späť na pôvodný

Ako problém riešiť

V cenníku odstráňte väzbu na ten istý poplatok.


2. Problém pri vykresľovaní (GUI)

Chyba môže vzniknúť aj pri práci s rozhraním, typicky pri zobrazení väčšieho objemu dát.

V logu sa potom objavujú opakujúce sa volania napr.:

at java.awt.AWTEventMulticaster.componentMoved
at java.awt.AWTEventMulticaster.componentResized

👉 znamená to, že:

  • komponent sa opakovane prekresluje / prepočítava

  • vzniká slučka v GUI udalostiach

Ako problém riešiť

  • obmedziť množstvo zobrazených dát (filter, menší rozsah obdobia)

  • zatvoriť a znovu otvoriť agendu

Ste s tem dobili odgovor na svoje vprašanje?