4

I´m having an execution error when asigning a TableView to a ControlFX TableFilter

Code

  ...

 Platform.runLater(new Runnable() {

                    public void run() {

                        for (int i = 0 ; i < columnNames.size() ; i++) {  
                            tblSearch.getColumns().add((TableColumn<List<Object>, Object>) columnNames.get(i));

                        }

                        tblSearch.getItems().setAll(dataFromCommonDAO.getData());

                        //Adding the filter option to the table
                        TableFilter.forTableView(tblSearch).apply();
                    }
                });
 ...

When running the application and while reloading the data of the table sometimes I get the following error, but still the filter works and the table reloads ok.

 java.lang.NoSuchMethodException: javafx.scene.control.skin.TableViewSkin.getTableHeaderRow()
at java.base/java.lang.Class.getDeclaredMethod(Class.java:2432)
at impl.org.controlsfx.ReflectionUtils.getTableHeaderRowFrom(ReflectionUtils.java:173)
at impl.org.controlsfx.table.FilterPanel.checkChangeContextMenu(FilterPanel.java:225)
at impl.org.controlsfx.table.FilterPanel.lambda$new$1(FilterPanel.java:87)
at javafx.base/javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360)
at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.base/javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
at javafx.base/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
at javafx.base/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
at javafx.graphics/javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82)
at javafx.controls/javafx.scene.control.Control$2.set(Control.java:250)
at javafx.controls/javafx.scene.control.Control$2.set(Control.java:233)
at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:899)
at javafx.controls/javafx.scene.control.Control.access$000(Control.java:83)
at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:89)
at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:67)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:147)
at javafx.graphics/javafx.scene.Parent.doProcessCSS(Parent.java:1419)
at javafx.graphics/javafx.scene.Parent.access$400(Parent.java:81)
at javafx.graphics/javafx.scene.Parent$1.doProcessCSS(Parent.java:127)
at javafx.graphics/com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:100)
at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:147)
at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9513)
at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9506)
at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9506)
at javafx.graphics/javafx.scene.Scene.doCSSPass(Scene.java:583)
at javafx.graphics/javafx.scene.Scene.access$3500(Scene.java:173)
at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2502)
at javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:410)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:409)
at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:436)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
at java.base/java.lang.Thread.run(Thread.java:844)

I´m also getting this error when using this code:

 Platform.runLater(new Runnable() {

                    public void run() {

                        for (int i = 0 ; i < columnNames.size() ; i++) {  
                            tblSearch.getColumns().add((TableColumn<List<Object>, Object>) columnNames.get(i));
                            //tblTareas.getColumns().get(i).setText(columnNamesShowList.get(i));
                        }

                        tblSearch.getItems().setAll(dataFromCommonDAO.getData());

                        //TableFilter.forTableView(tblSearch).apply();
                        Builder<List<Object>> tblSearchBuilder= TableFilter.forTableView(tblSearch);
                        tblSearchBuilder.apply();
                    }
                });

Is there anything I´m missing or something wrong when configuring any of these ways the ControlFX TableFilter?

ItachiUchiha
  • 36,135
  • 10
  • 122
  • 176
LazyTurtle
  • 131
  • 1
  • 3
  • 16
  • 1
    Are you running Java 9 with a ControlsFX 8.+ version? – José Pereda Jan 31 '18 at 13:20
  • No, Java 9 (jdk 9.0.1) and controlsfx-9.0.0.jar – LazyTurtle Jan 31 '18 at 13:24
  • 1
    from the stacktrace, it looks like a bug in controlsfx - in fx9 getTableHeaderRow is declared in TableViewSkinBase, not TableViewSkin – kleopatra Jan 31 '18 at 13:33
  • 1
    It is a bug in ControlsFX 9, indeed: while `ReflectionUtils` uses `TableViewSkinBase` as [argument](https://bitbucket.org/controlsfx/controlsfx/src/faac7afb953dd8f298b8b7cb8fb21e588b83931c/controlsfx/src/main/java/impl/org/controlsfx/ReflectionUtils.java?at=9.0.0&fileviewer=file-view-default#ReflectionUtils.java-171), the actual class is `TableViewSkin`, and it should call `skin.getClass().getSuperclass()`. – José Pereda Jan 31 '18 at 13:51
  • You can file an issue [here](https://bitbucket.org/controlsfx/controlsfx/issues?status=new&status=open) – José Pereda Jan 31 '18 at 13:55
  • @JoséPereda those reflection tricks should probably _not_ use the given param at all but hard-code the declarer .. my preference at least, swimming in the dark on a regular basis :) – kleopatra Jan 31 '18 at 14:12
  • Thank you all for your comments – LazyTurtle Jan 31 '18 at 17:05
  • So... what's the solution? Is there any way to catch this Exception? – awwsmm Jan 05 '19 at 17:59

0 Answers0