Přeskočit na hlavní obsah

Chyba: class java.lang.StackOverflowError

Při práci s dokladem (např. při vložení položky z ceníku) dojde k pádu operace s chybou: java.lang.StackOverflowError

Autor: Petr Pech
Aktualizováno před více než týdnem

Jak se problém projevuje

Při práci s dokladem (např. při vložení položky z ceníku) dojde k pádu operace s chybou: java.lang.StackOverflowError

Co chyba znamená

Tato chyba znamená, že došlo k příliš hlubokému řetězci volání metod, který vedl k vyčerpání zásobníku (stacku).

K tomu může dojít například:

  • při cyklické vazbě v datech (nekonečné zpracování)

  • při opakovaném vyvolávání událostí v rozhraní (GUI)

  • nebo obecně při nekontrolovaném opakování operace

Příklady


1. Poplatky v ceníku

V logu lze sledovat:

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á přiřazený poplatek

  • tento poplatek má nastavený další poplatek

  • a ten odkazuje zpět na původní

Jak problém řešit

V ceníku odstraňte vazbu na tentýž poplatek.


2. Problém při vykreslování (GUI)

Chyba může vzniknout i při práci s rozhraním, typicky při zobrazení většího objemu dat.

V logu se pak objevují opakující se volání např.:

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

👉 znamená to, že:

  • komponenta se opakovaně překresluje / přepočítává

  • vzniká smyčka v GUI událostech

Jak problém řešit

  • omezit množství zobrazených dat (filtr, menší rozsah období)

  • zavřít a znovu otevřít agendu

Dostali jste odpověď na svou otázku?