NullPointer在setText()上的exception,而所有内容都已正确加载和注释

我从start()方法尝试在带注释的标签上调用setText()时收到以下exception。 我看过一个类似的问题,但之所以对那个人不起作用的原因是因为他的标签没有注释,而我的标签是。

 java.lang.NullPointerException at io.github.blubdalegend.openbravery.OpenBravery.applyBuild(OpenBravery.java:67) at io.github.blubdalegend.openbravery.OpenBravery.start(OpenBravery.java:58) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source) at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source) at java.lang.Thread.run(Unknown Source) 

这是我的主要课程:

 public class OpenBravery extends Application implements Initializable { @FXML private Button rerollButton; @FXML private Label champL; public static void main(String[] args) { System.out.println("Downloading files from Dropbox..."); updateFiles(); System.out.println("Download complete!"); Application.launch(OpenBravery.class, (java.lang.String[]) null); } @Override public void initialize(URL location, ResourceBundle resources) { rerollButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { } }); } private static void updateFiles() { FileManager fm = new FileManager(); fm.downloadChamps(); fm.downloadItems(); } @Override public void start(Stage stage) { try { Pane pane = (Pane) FXMLLoader.load(OpenBravery.class.getResource("build.fxml")); Scene scene = new Scene(pane); stage.setScene(scene); stage.setTitle("OpenBravery"); stage.setResizable(false); applyBuild(); stage.show(); } catch (Exception e) { e.printStackTrace(); } } private void applyBuild() { Build build = new Build(); champL.setText(build.getChamp()); } } 

我的build.fxml像这样开始:

           

那我在这里想念的是什么?

你没有在控制器上调用applyBuild(),而是在应用程序实例上调用它。 @FXML字段仅在控制器中初始化。 最好使控制器和应用程序分开,以避免这种混淆。 创建Application类的两个实例也是不好的做法。

编写一个单独的类作为控制器:不要使用Application子类作为控制器类。