启动2个JavaFX控制器之间的通信

启动2个JavaFX控制器之间的通信,java,javafx,Java,Javafx,我在一所大学学习Java,我们的一个项目要求我们制作一个图像编辑器(其控制器名为ImageDisplayController),按下一个按钮(贴有“showfilter”的可爱标签)后,它会有一个内核过滤器窗口。这是通过两个独立的阶段来完成的,正如我的导师所建议的那样 但是,在尝试在ImageView(名为imageView2)中获取图像时,它一直以null返回。我创建了一个名为mainController的控制器实例,从那里获取imageView2,然后使用getImage()方法在Image

我在一所大学学习Java,我们的一个项目要求我们制作一个图像编辑器(其控制器名为
ImageDisplayController
),按下一个按钮(贴有“showfilter”的可爱标签)后,它会有一个内核过滤器窗口。这是通过两个独立的阶段来完成的,正如我的导师所建议的那样

但是,在尝试在ImageView(名为
imageView2
)中获取图像时,它一直以null返回。我创建了一个名为
mainController
的控制器实例,从那里获取
imageView2
,然后使用
getImage()
方法在ImageView中获取图像,但它仍然返回为null。请有人告诉我我做错了什么?感谢任何帮助

private void applyKernel() {
        try {
            double sum = 0;
            for (int j = 0; j < 9; j++) {
                sum += Double.parseDouble(textFields()[j]);
            }
            for (int i = 0; i < 9; i++) {
                double textNum = Double.parseDouble(textFields()[i]);
                textNum /= sum;
                kernel[i] = textNum;
            }

            //Part Where There's Trouble

            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("ImageDisplay.fxml"));
            ImageDisplayController mainController = fxmlLoader.getController();
            Image image = mainController.imageView2.getImage();
            Image newImage = convolve(image, kernel);
            mainController.imageView2.setImage(newImage);
        } catch (NumberFormatException e) {
            System.out.println("That is not a valid number");
        } catch (NullPointerException e) {
            System.err.println("The image cannot be null");
        }
    }
private void applyKernel(){
试一试{
双和=0;
对于(int j=0;j<9;j++){
sum+=Double.parseDouble(textFields()[j]);
}
对于(int i=0;i<9;i++){
double textNum=double.parseDouble(textFields()[i]);
textNum/=总和;
内核[i]=textNum;
}
//有麻烦的地方
FXMLLoader FXMLLoader=新的FXMLLoader(getClass().getResource(“ImageDisplay.fxml”);
ImageDisplayController mainController=fxmlLoader.getController();
Image Image=mainController.imageView2.getImage();
Image newImage=卷积(图像,内核);
main controller.imageView2.setImage(newImage);
}捕获(数字格式){
System.out.println(“这不是一个有效的数字”);
}捕获(NullPointerException e){
System.err.println(“图像不能为空”);
}
}

您实际上没有加载FXML文件,因此
主控制器将为空。如果您没有解析和加载FXML文件,并显示从中加载的GUI,则创建
FXMLLoader
没有多大意义……您能更清楚地解释一下您在这里做什么吗?底线是,您应该使用共享模型来在控制器之间进行通信。也许可以看看是否有帮助。但是这里的问题中没有足够的信息来理解您试图做什么。当然。我有两个窗口,一个用于显示图像,另一个用于向其添加内核过滤器。第一个窗口由
ImageDisplayController
控制,第二个窗口是contr由
KernelDisplayController
下载。此代码位于
KernelDisplayController
中。在该代码中,我试图从位于
ImageDisplayController
中的ImageView
imageView2
中加载图像。然后,我使用名为
corvalve()的单独方法对其应用内核过滤器
,然后我设置
imageView2
以显示新修改的图像。我只是试图从
ImageDisplayController
访问
imageView2
。我们交叉了注释,但如果不了解更多代码,我无法给出完整的答案。我想我的建议是创建一个尽可能小的示例想一想你需要从哪里从另一个控制器访问一个控制器,看看你是否能让它工作。如果你不能,你可以编辑这个问题或发布一个新的问题,并在其中包含完整的示例。但也可以查看我的上一个链接,看看这是否给你提供了想法。我想我明白你在说什么。为了获得
imageView2
和它s附带的数据,我需要进入实际加载
ImageDisplay.fxml
的类,并为
ImageDisplayController
创建一个引用,然后我需要将该引用传递到新的控制器。之后,我将通过
mainController.imageView2
调用
imageView2
。我理解您的意思吗我在说什么?请尽管说我不是,我只是想学习。顺便说一句,对于任何对Java的理解不足,我深表歉意。