Я пытаюсь обновить форму при щелчке строки таблицы. Обычно ошибка возникает при первом клике, но обновляет форму правильно.
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)
Я использовал Java 11 (OpenJDK) и JavaFx 2, затем я нашел несколько ответов, что это может быть несовместимостью, затем яперешел на JavaFx 13, но проблема все еще происходит. Если я остановлю код в методе события onMouseClicked (), ошибка не произойдет, однако, если навести курсор мыши на таблицу, достаточно ее выбросить.
equipmentTableView.setOnMouseClicked((MouseEvent event) -> {
if (event.getButton().equals(MouseButton.PRIMARY)) {
int index = equipmentTableView.getSelectionModel().getSelectedIndex();
equipment = equipmentTableView.getItems().get(index);
loadData(equipment);
}
});
<TableView layoutX="20.0" layoutY="200.0" prefHeight="200.0" prefWidth="450.0" fx:id="equipmentTableView">
<columns>
<TableColumn prefWidth="100.0" text="Nome" fx:id="nameColumn">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="100.0" text="I.P." fx:id="ipColumn">
<cellValueFactory><PropertyValueFactory property="ipAddress"/></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="160.0" text="Serial" fx:id="dicomEquipmentIdColumn">
<cellValueFactory><PropertyValueFactory property="dicomEquipmentId"/></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="100.0" text="Sala" fx:id="roomNickNameColumn">
<cellValueFactory><PropertyValueFactory property="roomId"/></cellValueFactory>
</TableColumn>
</columns>
<effect>
<InnerShadow/>
</effect>
</TableView>
Я использую Springboot2.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;
}
}
Любая помощь приветствуется! Спасибо