Himanshu ARORA
Himanshu ARORA

Reputation: 291

JavaFx java.lang.StackOverflowError

I've got a very bizarre error while i tried to set the graphics of 256 JavaFx Buttons at once. The node which i tried to set as graphics of buttons is a stack pane. It seems to me that the application kind of ran out of resources because of this heavy maneuver of setting the graphics of so many buttons at the same time but I'm not certain about it. Any sort of suggestion is highly appreciated.

The error log is below :

java.lang.StackOverflowError
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)
    at javafx.scene.Node.processCSS(Node.java:8732)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.processCSS(Node.java:8725)
    at javafx.scene.Node.applyCss(Node.java:8825)
    at javafx.scene.Node.impl_processCSS(Node.java:8746)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:648)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.<init>(LabeledSkinBase.java:130)
    at com.sun.javafx.scene.control.skin.ButtonSkin.<init>(ButtonSkin.java:44)
    at javafx.scene.control.Button.createDefaultSkin(Button.java:191)
    at javafx.scene.control.Control.impl_processCSS(Control.java:876)

The snippet of code is below:

Upvotes: 1

Views: 715

Answers (1)

Mark
Mark

Reputation: 158

I came across your question while looking for a solution to my issue. I was getting the exact same exception when trying to put 300 or so labels on a pane. In the end I switched to using a TableView and everything works great now. My best guess is the JavaFX panes are not optimized to support this many items on them. The TableView seems a lot better for stuff like this.

What I was doing was basically drawing my own version of a table on a pane and adding a scroll pane to it as well. I was doing this because frankly it worked fine in swing and I was replacing some old swing code. I would loop through my list of strings I wanted to display as labels and added them to the pane, setting their sizes manually to however tall I wanted each row, but when the other style settings were applied I got the same error as you. It was also extremely slow. What took less than a second to paint in swing was taking up to 20 seconds to paint in JavaFX. Now that I've put everything on an fx table it is working fine. There are some good examples out there about how to use tables though if you are still interested in this thread I will gladly post some sample code when I check back.

Upvotes: 1

Related Questions