使用新节点

时间:2017-04-30 00:24:55

标签: java javafx drop-down-menu nullpointerexception

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

主要:

    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);

    }
}

1 个答案:

答案 0 :(得分:0)

问题和解决方案

不要写:

@FXML 
JFXDrawer drawer = new JFXDrawer();

而只是写:

@FXML 
JFXDrawer drawer;

在你的FXML中有一个相应的fx:id定义:

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

注意:您的示例代码已经定义了fx:id,因此您需要删除= new JFXDrawer()以使代码生效。

测试和解释

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

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

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

可以在James_D的answer on FXML declarations中找到进一步的解释。

其他潜在问题

这些与您的问题中的问题无关,只是我在审核时注意到的一些事项:

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