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
