gpt4 book ai didi

使用新节点时出现 JavaFX 空指针异常

转载 作者:行者123 更新时间:2023-11-30 06:45:51 24 4
gpt4 key购买 nike

我添加了一个汉堡包、一个抽屉和一条文字。当我使用例如 Text text = new Text(); 初始化它们时,所有唯一的工作或 JFXDrawer 抽屉 = 抽屉。当我只编写私有(private) Text 文本或私有(private) JFXdrawer 抽屉时,我得到一个空点异常。有人可以告诉我我在这里做错了什么吗...非常感谢。

主要:

    import com.jfoenix.controls.JFXTextField;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.*;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.awt.event.ActionEvent;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{

Parent root = FXMLLoader.load(getClass().getResource("StartWindow.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}

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

}
}

最佳答案

问题和解决方案

不要写:

@FXML 
JFXDrawer drawer = new JFXDrawer();

只需写:

@FXML 
JFXDrawer drawer;

并且在您的 FXML 中有相应的 fx:id定义:

<JFXDrawer fx:id="drawer" .../>

注意:您的示例代码已经定义了 fx:id,因此您需要做的就是删除 = new JFXDrawer()使代码正常工作。

测试和解释

就抽屉和汉堡而言,我加载了您的代码,删除了 FXML 变量的新引用并运行了代码,它对我来说似乎工作得很好(没有空指针)。

我真的无法帮助解决项目中的所有问题。

通过删除新引用,我的意思是我删除了:= new JFXDrawer() 。这是不必要的,也是错误的,因为 JFXDrawer 已经由 FXMLLoader 创建并注入(inject)。如果将其设置为新值,则注入(inject)的值将丢失,并且您将失去引用与 FXML 文档之间的连接。

更多解释可以在 James_D 的 answer on FXML declarations 中找到。 .

其他潜在问题

这些与您问题中的问题无关,只是我在审查时注意到的一些内容:

  1. 使用Platform.exit() ,而不是 System.exit(0)。
  2. 响应鼠标点击按钮执行操作而打开辅助功能字符串是很奇怪的。不要这样做。应保留可访问性字符串用于与可访问性相关的操作。相反,您应该使用按钮的操作处理程序。由于按钮是在 FXML 中定义的,因此您应该能够只定义一个 onAction="#handleXXX"处理程序,其中 XXX 只是要执行的操作的名称,并且会因按钮而异,并且处理程序在您的 Controller 中定义。
  3. 仅仅命名 Controller Controller 是不正确的。假设您有很多 Controller ,并且需要不同的名称来区分它们。您不应该尝试在 FXML 文档之间共享单个 Controller (我不知道您是否正在尝试这样做,但只是一些一般性建议)。
  4. 在 FXML 加载时添加到 anchor Pane 子列表似乎也是错误的。如果您继续向现有锚定 Pane 添加新 Pane ,则添加的旧 Pane 将保留在锚定 Pane 中(仅分层在新 Pane 下方)。这不太可能是你想要的。我不太清楚你想要什么,所以我不能建议你应该做什么(也许使用anchorPane.getChildren().setAll(newPane)来完全替换anchorPane的当前内容,但也许是不同的东西)。
  5. 此外,仅将子项设置到 AnchorPane 而不设置 anchor 约束(topAnchor、leftAnchor 等)是不常见的,因为没有约束,AnchorPane 不会增加太多值(value),您可以只使用标准 Pane 或 StackPane 来代替。

关于使用新节点时出现 JavaFX 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com