当前位置: 首页 > 知识库问答 >
问题:

JavaFX嵌入式表FXML提供空指针异常

龙玄天
2023-03-14

我试图通过参考YT的一些教程来创建一个表视图。当我做一个简单的表视图及其相关的控制器时,它工作。

主类:

    public class TableTest extends Application {

    public TableTest() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        try {
            // load the fxml file
            FXMLLoader tableloader = new FXMLLoader(getClass().getResource("TestTableView.fxml"));
            Parent root = tableloader.load();

            TableTestController controller = tableloader.getController();
            controller.initializeModel();

            //load the login scene
            Scene scene = new Scene(root, 800, 400);
            stage.setTitle("Test Table Screen");
            stage.setScene(scene);
            stage.show();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
public class TableTestController {

    @FXML private  TableView<TablePost> t_posts ;
    @FXML private  TableColumn<TablePost, String> c_post_id ;
    @FXML private  TableColumn<TablePost, String> c_post_title ;
    @FXML private  TableColumn<TablePost, String> c_post_desc ;
    @FXML private  TableColumn<TablePost, String> c_post_creator ;

    @FXML private TabPane TabPane;
    @FXML private Tab AllPosts;
    @FXML private AnchorPane t_anch;
    @FXML private TableTestController t_anchController;

    @FXML private Parent TAllPosts;

    public void initializeModel() {
        System.out.println("Starting Table Init");
        c_post_id.setCellValueFactory(new PropertyValueFactory<TablePost, String>("postId"));
        c_post_title.setCellValueFactory(new PropertyValueFactory<TablePost, String>("postTitle"));
        c_post_desc.setCellValueFactory(new PropertyValueFactory<TablePost, String>("postDesc"));
        c_post_creator.setCellValueFactory(new PropertyValueFactory<TablePost, String>("postCreator"));
        t_posts.setItems(getPosts());
        System.out.println("Finished Table Init");
   }

    public ObservableList<TablePost> getPosts() {
        ObservableList<TablePost> posts = FXCollections.observableArrayList();
        TablePost p1 ;
        p1 = new TablePost("id1","title1","desc1","creator1");
        posts.add(p1);
        p1 = new TablePost("id2","title2","desc2","creator2");
        posts.add(p1);
        return posts;
    }

}
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity"
    minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
    prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1"
    xmlns:fx="http://javafx.com/fxml/1"
    fx:id ="t_anch"
    fx:controller="test.TableTestController">

    <children>
        <TableView fx:id="t_posts" layoutX="14.0" layoutY="65.0"
            prefHeight="141.0" prefWidth="570.0">
            <columns>
                <TableColumn fx:id="c_post_id" prefWidth="78.0"
                    text="Post Id" />
                <TableColumn fx:id="c_post_title" prefWidth="135.0"
                    text="Post Title" />
                <TableColumn fx:id="c_post_desc" prefWidth="237.0"
                    text="Post Desc" />
                <TableColumn fx:id="c_post_creator" prefWidth="119.0"
                    text="Post Creator" />
            </columns>
        </TableView>
    </children>
</AnchorPane>

TestTableView2.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity"
    minHeight="-Infinity" minWidth="-Infinity" prefHeight="515.0"
    prefWidth="714.0" xmlns="http://javafx.com/javafx/11.0.1"
    xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="test.TableTestController">
    <center>
        <TabPane fx:id="TabPane">
            <tabs>
                <Tab fx:id="AllPosts" closable="false" text="All Posts">
                    <content>
                        <fx:include fx:id="TAllPosts"
                            source="TestTableView.fxml" />
                    </content>
                </Tab>
            </tabs>
        </TabPane>
    </center>
</BorderPane>

共有1个答案

许胡非
2023-03-14

您只需在控制器中为tableview2进行初始化即可。还要在控制器中添加allposts,而不是FXML:

public class TableView2Controller {

    @FXML private Tab AllPosts;

    @FXML
    public void initialize() throws IOException {

      FXMLLoader loader = new FXMLLoader(getClass().getResource("TestTableView.fxml"));
      Pane pane = loader.load();
      TableTestController controller = loader.getController();
      controller.initializeModel();
      AllPosts.setContent(pane);
   }
}
 类似资料:
  • 问题内容: 在我的appium + testng应用程序中,我输入的是: 给出以下堆栈跟踪: 似乎Appium服务器没有使用该功能成功实例化,但这几乎是在线示例的复制和粘贴-我无法弄清楚出了什么问题。 问题答案: 用if语句括住“ driver”,以了解是否== null。 这是我的能力 使用appium 1.2 *

  • Struts检测到未处理的异常: 消息:java.lang.nullPointerException文件:org/apache/jsp/web_002dinf/jsps/api/multilineout_jsp.java行号:160 以下是服务器控制台上的错误: 我在前面读到过,这个问题可能是由于Tomcat库&Web-INF库中的JAR文件冲突造成的,但事实并非如此。 我对Java非常陌生,只维

  • 我正在编写的一个程序出现了以下问题,我在互联网上搜索了一下,但我真的找不到任何东西来帮助我理解以下问题 因此,在另一个类中,我编写了一个方法,只要单击搜索按钮,该方法就执行如下所示: 然后SearchController类看起来如下所示(我在这里简化了它): 有人能告诉我为什么可以在initialize方法上写文本吗(该方法在行...那么,如果我尝试在该行之后的标签上写,为什么它不起作用?) 提前

  • 问题内容: 有可能这可能是一个双重问题。我将String变量初始化为null。我可能会或可能不会使用一个值更新它。现在我想检查此变量是否不等于null以及我尝试执行的操作是否会得到null指针异常。空指针异常,因为它代价高昂。是否有任何有效的解决方法.TIA 问题答案: 如果您使用 你 不会 得到。 我怀疑你在做什么: 这是因为null 而引发,而不是因为null。 如果仍然无法解释,请发布您用于

  • 我已经更新了我的项目中的一些依赖关系之后,我的Hibernate配置类显示Nullpointerx的。 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案。 我已经尝试过的一些解决方案:- 使用@bean(name=“entityManagerFactory”)提供bean名称 我面临的问题 波姆。xml文件 配置类 db

  • 我试图通过集成Struts 2来创建一个注册页面 Hibernate配置文件: Hibernate映射文件: