繁体   English   中英

NullPointerException-JavaFX

[英]NullPointerException - JavaFX

我在此代码中获取NullPointerException。 我正在使用JavaFX 2.2,NetBeans IDE 7.3.1,Windows 8,Java 1.7.0

    public class SampleController implements Initializable {
    @FXML
    GridPane grid;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
        for(int i=0;i<10;i++){
            for(int j=0;j<4;j++){
                AnchorPane tile = new AnchorPane();
                tile.setMaxSize(225, 225);
                grid.add(tile, j, i);
            }
        }
    }
}

-JavaFX 2.2

我的猜测是您的GridPane没有初始化。 如果您在FXML文件中有不同的ID,则会发生这种情况。

这可能是导致错误的原因,但是我不能确定没有完整的代码。

也,

您应该学习如何调试NullPointerException 这通常很简单。 以下是一些入门知识:

  1. 读取堆栈跟踪 它的第一行看起来像这样:

Exception in thread "main" java.lang.NullPointerException 而且,如果您看不到任何信息或没有提供任何信息,请确保您没有捕获到所遇到的异常。

  1. 找出空值和位置(堆栈跟踪带有行号。)
  2. 修复它(这通常意味着初始化一些未初始化的内容,如您所愿)

您可能想了解一般如何调试Java程序(登录,在运行时逐步执行代码等)。 我已经写了一篇简短的(初学者) 博客文章

 public class SampleController implements Initializable {
@FXML
GridPane grid = new GridPane();
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
    for(int i=0;i<10;i++){
        for(int j=0;j<4;j++){
            AnchorPane tile = new AnchorPane();
            tile.setMaxSize(225, 225);
            grid.add(tile, j, i);
        }
    }
}

}您必须初始化GridPane

如果异常在行上引起grid.add(tile, j, i); ,这意味着GridPane grid未初始化。 您可能尚未在<GridPane ...><GridPane ...>中添加fx:id属性。

您的<GridPane>应该类似于<GridPane fx:id="grid" ... >

初始化“ GridPane网格;” 通过将fx:id设置为“ grid”或通过此处的代码,从气味生成器中获取一些信息。

几种原因会导致此问题。 1. GridPane具有@FXML标记,这意味着应使用fxml loader对其进行初始化,一个可能的原因是,您没有在scenebuilder中将Grid的ID赋予GridPane。 2.另一个原因可能是错误地指定了FXML控制器的名称。 因此,您必须指定软件包的正确名称(如果控制器不在默认软件包中),然后指定(。)和控制器名称。

从fxml文件加载接口时,需要花费一些时间来初始化该fxml中的所有组件。 如果在初始化之前使用了这些组件,则将给出NullPointerException。 我个人在代码中为摆脱此问题所做的工作是等待平台加载完毕,然后开始使用这些组件。 如果您想按照以下代码寻求类似的解决方案,

new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                Platform.runLater(new Runnable() {
                    public void run() {
                        //run your code here
                    }

                });

            }

        }, 500);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM