单击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()中的控制器,问题就解决了。很可能没有解决,但被弄脏了;)听起来好像字段没有按预期注入。站在你的立场上,我会尽我最大的努力去理解和修正真正的原因,否则你会用定时炸弹产生脆弱的代码。