单击TableView时JavaFX13抛出java.lang.ClassCastException

单击TableView时JavaFX13抛出java.lang.ClassCastException,java,javafx,classcastexception,Java,Javafx,Classcastexception,我正在尝试在单击表行时更新表单。通常错误发生在第一次单击时,但会正确更新表单 java.lang.ClassCastException: class com.sun.javafx.geom.BoxBounds cannot be cast to class com.sun.javafx.geom.RectBounds (com.sun.javafx.geom.BoxBounds and com.sun.javafx.geom.RectBounds are in unnamed module of

我正在尝试在单击表行时更新表单。通常错误发生在第一次单击时,但会正确更新表单

java.lang.ClassCastException: class com.sun.javafx.geom.BoxBounds cannot be cast to class com.sun.javafx.geom.RectBounds (com.sun.javafx.geom.BoxBounds and com.sun.javafx.geom.RectBounds are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @5419f379)
    at com.sun.javafx.sg.prism.NGNode.applyTransform(NGNode.java:2484)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1226)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.sg.prism.NGNode.accumulateGroupDirtyRegion(NGNode.java:1208)
    at com.sun.javafx.sg.prism.NGNode.accumulateDirtyRegions(NGNode.java:1041)
    at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:248)
    at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
    at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
    at java.base/java.lang.Thread.run(Thread.java:834)
我使用的是Java11(OpenJDK)和JavaFX2,然后我发现了一些可能是不兼容的答案,然后我转向JavaFX13,但问题仍然存在。如果我停止事件方法onMouseClicked()中的代码,则不会发生错误,但是如果将鼠标移到表上就足以抛出错误

 equipmentTableView.setOnMouseClicked((MouseEvent event) -> {
    if (event.getButton().equals(MouseButton.PRIMARY)) {
        int index = equipmentTableView.getSelectionModel().getSelectedIndex();
        equipment = equipmentTableView.getItems().get(index);

        loadData(equipment);
    }
});

我正在使用Springboot 2.2和类中定义的FXMLloader:

public class SpringFXMLLoader {
    private final ResourceBundle resourceBundle;
    private final ApplicationContext context;

    public SpringFXMLLoader(ResourceBundle resourceBundle, ApplicationContext context) {
        this.resourceBundle = resourceBundle;
        this.context = context;
    }

    public Parent load(String fxmlPath) throws IOException {
        FXMLLoader loader = getFxmlLoader(fxmlPath);

        return loader.load();
    }

    public Pane loadPane(String fxmlPath) throws IOException {
        FXMLLoader loader = getFxmlLoader(fxmlPath);

        return loader.load();
    }

    private FXMLLoader getFxmlLoader(String fxmlPath) {
        FXMLLoader loader = new FXMLLoader();
        loader.setControllerFactory(context::getBean);
        loader.setResources(resourceBundle);
        loader.setLocation(getClass().getResource(fxmlPath));
        return loader;
    }

}

欢迎任何帮助!谢谢

我不确定问题出在哪里,但是通过将表声明从FXML文件移动到initialize()中的控制器,问题就解决了。

很可能没有解决,但被弄脏了;)听起来好像字段没有按预期注入。站在你的立场上,我会尽我最大的努力去理解和修正真正的原因,否则你会用定时炸弹产生脆弱的代码。