JavaFX 13 выбрасывает java.lang.ClassCastException при нажатии на TableView - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь обновить форму при щелчке строки таблицы. Обычно ошибка возникает при первом клике, но обновляет форму правильно.

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;
    }

}

Любая помощь приветствуется! Спасибо

1 Ответ

0 голосов
/ 05 ноября 2019

Я не уверен, в чем заключалась проблема, однако она была решена путем перемещения объявления таблицы из файла FXML в контроллер в initialize ().

...