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

JavaFx从另一个控制器调用方法

梁锋
2023-03-14

我想在单击该按钮时从interface_pasienController上的Interface_adminController调用autoRefresh()方法。但是有一个错误“java.lang.NullPointerException”。代码怎么了?

@Override
   public void initialize(URL url, ResourceBundle rb) {

   }

@FXML
private int actionAmbilAntrian(ActionEvent event) throws SQLException, DocumentException, FileNotFoundException, IOException {
        System.out.println("You clicked me!");

        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();
        String tanggal = dateFormat.format(date);

        DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
        Date time = new Date();
        String waktu = timeFormat.format(time);

        System.out.println(dateFormat.format(date));
        System.out.println(timeFormat.format(time));

        String sql = "INSERT INTO antrian VALUES(?,?,?,?,?,?)";

        int id = autonumber();
        try (Connection conn = connection.connection();
             PreparedStatement pstmt = conn.prepareStatement(sql)
            ){                                  
                pstmt.setInt(1, id);
                pstmt.setString(2, tanggal);
                pstmt.setInt(3, id);
                pstmt.setString(4, waktu);
                pstmt.setString(5, "");
                pstmt.setBoolean(6, false);
                pstmt.executeUpdate();

                System.out.println("Insert to Database");

                System.out.println("Create PDF File");
                String filename = id + ".pdf";

                Document document = new Document();
                PdfWriter.getInstance(document, new FileOutputStream("D://"+id+".pdf"));
                document.open();
                if(id < 10){
                    document.add(new Paragraph("00"+ id));
                } else if(id > 9 && id < 99){
                    document.add(new Paragraph("0"+ id));
                } else if(id > 99){
                    document.add(new Paragraph(id));
                }
                document.add(new Paragraph("Tanggal: " + tanggal));
                document.add(new Paragraph("Waktu: " + waktu));
                document.close();

                FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/interface_admin.fxml"));
                Interface_adminController adminC = loader.getController();
                System.out.println("adminC = "+adminC);
                adminC.autoRefresh(); // an error: java.lang.NullPointerException


                System.out.println("itext PDF program executed");
            } catch(SQLException e){
                System.out.println(e);
                System.out.println("Failed");
            }
        return id;
}
@Override
    public void initialize(URL url, ResourceBundle rb) {
        showItem();
    }

    void autoRefresh() {
        final LongProperty lastUpdate = new SimpleLongProperty();
        final long minUpdateInterval = 0 ;

        AnimationTimer timer = new AnimationTimer() {

            @Override
            public void handle(long now) {
                try{
                    if (now - lastUpdate.get() > minUpdateInterval) {
                        showItem();
                        lastUpdate.set(now);
                    }
                } catch(Exception e){
                    System.out.println(e);
                }
            }
        };
        timer.start();
    }

线程“JavaFX Application thread”java.lang.RuntimeException中的异常:java.lang.Reflect.InvocationTargetException由AntrianPasienFarmasi.Interface_PasienController.ActionNambilanTrian(Interface_PasienController.java:101)中的:java.lang.NullPoInterException引起...58其他

共有1个答案

公孙驰
2023-03-14

如果要从控制器调用函数,则必须执行以下操作

loader.load();
Interface_adminController adminC = loader.getController();

首先必须运行loader.load(),然后才能获得控制器。

 类似资料:
  • 需要你的帮助!这可能是更多的设计角度,但我在我的应用程序中使用这个模式,所以想得到一个想法。 我的问题是直接或间接地从一个控制器访问另一个控制器。是否有任何优雅的设计方法来做到这一点,而不是在另一个控制器中保留一个控制器的引用。 提前致谢

  • 我有两个控制器和。我正在读一本书的内容。来自的txt文件,我希望将该文本放置在的文本区域中。代码在中运行并读取良好,但当打开中的窗口时,从中读取的内容。文本内容在文本区域中不可见。我的显示String mine包含内容,但它不显示在的文本区域中。请帮助任何人。非常感谢。 FXMLDocumentController代码 在中,有一个我删除了和,这样代码就可以工作了。

  • 问题内容: 我试图通过使用变量在第一控制器中调用第二控制器的方法。这是我的第一个控制器中的一种方法: 我可以设置的值,但是由于某种原因我不能打电话。控制台显示此错误: TypeError:对象#没有方法’getMainCategories’ 有没有一种方法可以调用上述方法? 编辑: 我使用以下方法同时加载两个应用程序。 我肯定可以在这里使用服务,但我想知道是否还有其他选择可以这样做! 问题答案:

  • 问题内容: 使用SceneBuilder。我有2个阶段,每个阶段都有一个控制器: , 。 Stage1Controller: Stage2Controller: 这是使用2种方法 (称为in 方法)将这两个fxml文件加载到Main.java类中的方式: 该方法在第一阶段中用作方法,它在两个阶段都转换视图。 如何输入方法?谢谢 问题答案: “快速又脏”的方法是给的引用: 现在在您的主应用程序中:

  • 我有一个进度条,我试图在控制器的javaFX中更新它。我正在根据一个名为Generate()的函数更新进度条,如果它被调用,它应该更新主控制器内的进度条。但是,我拥有的代码不会更新它,而是更新了进度条的新实例。 我的DrawerContentController中的Generate方法是: 在我的主控制器中,我使用场景构建器通过fxml设置了进度条,我正在尝试从DrawerContentContr

  • 我试图通过从另一个应用程序实用程序类方法GlobalConfig.addSystemMessage()调用特定的方法FXMLDocumentController.onAddSystemMessage()来更新在我的fxml控制器中定义的javafx表视图。 这里是我加载fxml的主要应用程序类: 以下是FXMLDocumentController的一些部分: 这也是我的实用程序类,它有一个向数据库