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

当我尝试更改标签的文本值时,java.lang.Reflect.InvocationTargetException

龙弘济
2023-03-14

下面是一个使用fxml和NetBeans的javafx的简单标签项目。问题是,当我用

StartFomulars.setText("abc");

它只是得到一个例外,给出如下。

下面是main的代码,

package main;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Start extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Prove Controller = new Prove();
        Controller.launchController(stage);
    }

    public static void main(String[] args) {
        launch(args);
    }

}

fxml,

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

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

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="720.0" prefWidth="1080.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
  <children>
    <GridPane layoutX="0.0" layoutY="0.0" prefHeight="720.0" prefWidth="1080.0">
      <children>
        <GridPane GridPane.columnIndex="0" GridPane.rowIndex="0">
          <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          </columnConstraints>
          <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          </rowConstraints>
        </GridPane>
        <GridPane GridPane.columnIndex="1" GridPane.rowIndex="1">
          <children>
            <GridPane GridPane.columnIndex="0" GridPane.rowIndex="0">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
            </GridPane>
          </children>
          <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          </columnConstraints>
          <rowConstraints>
            <RowConstraints maxHeight="282.0" minHeight="10.0" prefHeight="282.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="281.0" minHeight="10.0" prefHeight="281.0" vgrow="SOMETIMES" />
          </rowConstraints>
        </GridPane>
        <GridPane GridPane.columnIndex="0" GridPane.rowIndex="1">
          <children>
            <Label text="Given: " GridPane.columnIndex="0" GridPane.rowIndex="0" />
            <Label text="Prove: " GridPane.columnIndex="0" GridPane.rowIndex="1" />
            <Label text="Goal: " GridPane.columnIndex="0" GridPane.rowIndex="2" />
            <Label fx:id="StartFomulars" text="StartFomulars" GridPane.columnIndex="1" GridPane.rowIndex="0" />
            <Label fx:id="GoalFomular" text="GoalFomular" GridPane.columnIndex="1" GridPane.rowIndex="2" />
          </children>
          <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="457.0" minWidth="10.0" prefWidth="125.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="802.0" minWidth="10.0" prefWidth="790.0" />
          </columnConstraints>
          <rowConstraints>
            <RowConstraints maxHeight="188.0" minHeight="10.0" prefHeight="156.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="364.0" minHeight="10.0" prefHeight="364.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="186.0" minHeight="10.0" prefHeight="43.0" vgrow="SOMETIMES" />
          </rowConstraints>
        </GridPane>
      </children>
      <columnConstraints>
        <ColumnConstraints hgrow="SOMETIMES" maxWidth="915.0" minWidth="10.0" prefWidth="915.0" />
        <ColumnConstraints hgrow="SOMETIMES" maxWidth="539.0" minWidth="10.0" prefWidth="165.0" />
      </columnConstraints>
      <rowConstraints>
        <RowConstraints maxHeight="359.0" minHeight="10.0" prefHeight="157.0" vgrow="SOMETIMES" />
        <RowConstraints maxHeight="582.0" minHeight="10.0" prefHeight="563.0" vgrow="SOMETIMES" />
      </rowConstraints>
    </GridPane>
  </children>
</AnchorPane>

这里是控制器的代码,

package main;

import ast.LogicStatement;
import java.io.IOException;
import java.util.List;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

/**
 *
 * @author zl2511
 */
public class Prove {

    private Parent parent;
    private Scene scene;
    private Stage stage;
    private List<LogicStatement> startStatements; 
    private LogicStatement goalStatement;

    @FXML
    private Label StartFomulars, GoalFomular; 

    public Prove() throws IOException { 

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Prove.fxml"));
        //fxmlLoader.setController(this);
        try {
            parent = (Parent) fxmlLoader.load();

            scene = new Scene(parent);
        } catch (IOException e) {
        }

        StartFomulars.setText("abc");

    }


    public void launchController(Stage stage) {

        this.stage = stage;
        stage.setTitle("start");
        stage.setScene(scene);
        stage.setResizable(true);
        stage.hide();
        stage.show();

    }

    public void redirectprove(Stage stage, List<LogicStatement> startFormulas, LogicStatement goalFormula) { 

        this.startStatements = startFormulas; 
        this.goalStatement = goalFormula; 

        stage.setScene(scene);
        stage.hide();
        stage.show();

    }
}

这里有个例外,

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException

共有1个答案

红智鑫
2023-03-14

你的结构很不寻常。更正常的做法是构造应用程序类、FXML文件和控制器,如教程所示。

当您设置了一些内容时,您的controller类和FXML之间没有连接。因此带注释的@fxml字段永远不会初始化。

其工作方式是,fxmlloaderload(...)方法将解析FXML文件。如果在加载器上设置了控制器,则定义了fx:id属性的任何元素都将被注入到控制器中匹配的@fxml注释字段中。

fxmlloader上设置控制器基本上有两种方法。首先是在FXML文件的根元素上定义fx:controller属性。这将导致FXML加载器创建指定类的新实例,并将其用作控制器。注意这在您的情况下是行不通的,因为您希望控制器是您已经创建的profy实例,而不是profy类的新实例。

第二种方法是创建一个FXMLLoader实例(而不是依赖您当前使用的静态FXMLLoader.Load(URL)方法),并对该实例调用SetController(...)。所以(我认为)不评论

//fxmlLoader.setController(this);

莱恩会让这件事成功的。

您可能还需要将字段的声明分开,即:

@FXML
private Label StartFomulars ;
@FXML
private Label GoalFomular; 

(如果没有这种改变,它可能会起作用,我从来没有像你那样尝试过。)

您可能还应该取出try{...}捕获(...)在prove的构造函数中使用{...}结构(因为您声明它throws),或者至少在catch块中执行某些操作。现在,如果在加载FXML时发生异常,您将不知道它,您只需继续尝试设置标签的文本。

 类似资料:
  • 我正在尝试为用Java编写的应用程序制作GUI。 我用Scene Builder制作了fxml文档,正确设置了fx: id,现在我正在尝试对表单进行简单的更改。 我的DocumentController: 我的外汇主文件: 我现在想要的一切,都是将LabelData设置为实际时间戳,但当我运行FX主文件时,什么都不会发生。有人能帮我吗? 谢谢你保罗 更新时间: 我的整个FXML文档: 我想要的一切

  • 问题内容: 为什么以下内容对我不起作用? 问题答案: 因为您的脚本在运行之前运行,所以标签存在于页面中(在DOM中)。可以将脚本放在标签后,或者等待文档完全加载(使用OnLoad函数) 这行不通: 这将起作用: 此示例(jsfiddle链接)维护顺序(首先是脚本,然后是标签),并使用onLoad:

  • 我有一个JavaFXML项目。它有一个从1到10的滑块,步骤为1。我有一个标签。 滑块=<代码>sl\U测试 标签=

  • 我正在使用标签来显示路径,我在侦听器中使用的关于Laebl的唯一方法是setText()方法。有没有办法不发生这种情况?我使用SWT,更喜欢维护网格布局,这样我就可以拥有2列。任何信息都会有所帮助。谢谢你。 这是密码

  • 问题内容: 我在使用键绑定来更改标签或任何参数的值时遇到麻烦。这是我的代码: 运行此命令时,我单击输入框并按Enter,希望标签将值更改为“更改值”。但是,尽管它确实打印了该文本,但标签保持不变。 通过查看关于类似问题的其他问题,我发现了如何在课堂外使用其中的一些功能,但是在课堂上进行操作时遇到了一些困难。 另外,顺便提一下,“主人”在tkinter中扮演什么角色? 问题答案: 上面的句子使lab

  • 这是我的ProdottoController: Prodotto实体: 这是视图(Freemarker): 当我尝试将值更新到表中时,出现以下错误: FreeMarker模板错误(调试模式;在生产中使用RETHROW!):以下内容已评估为null或缺失:==