有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaFX13抛出java。单击TableView时lang.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 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);
    }
});
<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>

我正在使用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;
    }

}

欢迎任何帮助!谢谢


共 (1) 个答案

  1. # 1 楼答案

    我不确定是什么问题,但是通过将表声明从FXML文件移动到initialize()中的控制器,问题得到了解决