当前位置: 首页 > 面试题库 >

正确加载并注释了所有内容后,setText()上出现NullPointer异常

向实
2023-03-14
问题内容

我收到以下异常,试图setText()start()方法中调用带注释的标签。我也看到过类似的问题,但之所以对那个人不起作用,是因为他的标签没有注释,而我的标签却没有注释。

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<ActionEvent>() {
            @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开始是这样的:

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

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
    minWidth="-Infinity" prefHeight="297.0" prefWidth="362.0"
    xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="io.github.blubdalegend.openbravery.OpenBravery">
    <children>
        <Label layoutX="14.0" layoutY="14.0" text="Your build:">
            <font>
                <Font size="32.0" />
            </font>
        </Label>
        <Label fx:id="champL" layoutX="14.0" layoutY="61.0" prefHeight="32.0"
            prefWidth="288.0" text="Label">
            <font>
                <Font size="17.0" />
            </font>
        </Label>

那我在这里想念什么?


问题答案:

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

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



 类似资料:
  • 这篇文章是applicationcontext.xml中bean声明的连续性 我有一个使用Spring3和Hibernate4以及JSF2的小应用程序,当我运行我得到的应用程序时。 ManagedBean: 并且我有注入注释: 在EmployeeService中,我有如下注释: 更新2 ApplicationContext.xml:

  • 我有一个抽象类,它有一个正在自动连接的依赖项: 我有一个扩展这个抽象类的类: 现在,在进行单元测试时,我可以做到: 这可以很好地工作,但是如果我对ClassA使用构造函数注入,则classC会出现空指针异常。 在第二种情况下,我甚至尝试用普通的构造函数调用替换InjectMocks,但ClassC对象没有被嘲笑。 堆栈跟踪:

  • 我正在抓取一个网页,并等待internet explorer完成加载,但由于某些原因,它不是。我试图在页面上获取一个值,但是等待部分没有等待,因此当应该有值时,该值返回为空。IE页面已完成加载,但页面上元素的值尚未加载。在继续下一行代码之前,是否有方法等待所有元素完成加载?这是我的密码:

  • 问题内容: 在我不使用Spring的项目中,我仅使用Hibernate。我不想将hbm.xml文件用于实体映射/描述/等。我只想使用注释。 如何告诉Hibernate 从某些包中加载所有带注释的类? 我在网上搜索,但没有运气。我也找不到有关最新的Hibernate版本的信息(大多数是过时的文章/帖子/等)。 编辑1: http://docs.jboss.org/hibernate/orm/4.3/

  • 我用jQuery将一些包含数学的内容加载到html文件中。现在我想让Mathjax排版这个新内容,但它不起作用。这就是我的JavaScript代码的样子 但它只加载内容,不应用MathJax。有什么建议说明它为什么不起作用吗? 编辑我添加了第二个按钮,带有第二次单击功能,运行以下脚本 如果我单击第一个按钮,它将加载新内容,而不应用MathJax。如果现在单击第二个按钮,它会将MathJax应用于新

  • java.lang.NullPointerException位于java.nio.file.files.provider(files.java:97),位于java.nio.file.files.newDirectoryStream(files.java:457),位于java.nio.file.files.list(files.java:3451),位于com.classtotestStutes