Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javafx中的FXML注入,怎么会突然变为空?_Java_Javafx_Fxml - Fatal编程技术网

javafx中的FXML注入,怎么会突然变为空?

javafx中的FXML注入,怎么会突然变为空?,java,javafx,fxml,Java,Javafx,Fxml,调试程序时,hiddenMenu在到达initialize方法时有一个值。但是,当我稍后创建一个大圆圈并在其上添加clickevent时,我希望hiddenMenu不可见 当我尝试hiddenMenu.setVisible(false)时,我得到一个nullpointerexception。我知道我在路上什么都没变。我是忘了还是错过了什么 我尝试了hiddenMenu.setVisible(false);没有成功 代码如下: public class MainWindow extends App

调试程序时,hiddenMenu在到达initialize方法时有一个值。但是,当我稍后创建一个大圆圈并在其上添加clickevent时,我希望hiddenMenu不可见

当我尝试hiddenMenu.setVisible(false)时,我得到一个nullpointerexception。我知道我在路上什么都没变。我是忘了还是错过了什么

我尝试了hiddenMenu.setVisible(false);没有成功

代码如下:

public class MainWindow extends Application implements Initializable {

@FXML
private AnchorPane root;

@FXML
private ComboBox<String> chooseFigureComboBox;

@FXML
private Button btnCreate;

@FXML
private HBox hiddenMenu;

@FXML
private ColorPicker cp;

@FXML
private Label lblColor;

@FXML
private Label lblSize;

@FXML
private Slider sli;

private Shape selected;
private List<Node> selectionList = new LinkedList<>();
private static MainWindow mainWindow;
private FigureHandler figureHandler;
private ObservableList<String> figures;
private ArrayList<Circle>circles;

@Override
public void start(Stage scene) throws Exception{
    MainWindow.mainWindow = this;
    figureHandler = FigureHandler.getInstance();
    figureHandler.setMainWindow(mainWindow);
    root = FXMLLoader.load(getClass().getResource("../grafik/mainWindow.fxml"));

    scene.setTitle("Hello World");
    scene.setScene(new Scene(root, 800, 600));
    scene.show();
}

public void addLargeCircle(){

    Circle circle = new Circle();
    circle.setRadius(100);
    circle.setFill(Color.RED);
    circle.addEventHandler(MouseEvent.MOUSE_CLICKED,e->{
        System.out.println("Ett klick skedde på cirkeln!");

        hiddenMenu.setVisible(false);

    });

    circle.addEventHandler(MouseEvent.MOUSE_DRAGGED,e->{
        moveCircle(e,circle);
    });

    root.getChildren().add(circle);
    //circles.add(circle);
    //figureHandler.addCircleToList(circle);
}

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {


    figures = FXCollections.observableArrayList("small Circle","medium circle","large Circle");
    chooseFigureComboBox.setItems(figures);
    circles = new ArrayList<>();

    cp.setValue(Color.RED);
    cp.setOnAction(e->{
        System.out.println("Changed color");
    });
}
public类主窗口扩展应用程序实现可初始化{
@FXML
隐根;
@FXML
私有组合框选择FigureComboBox;
@FXML
私人按钮创建;
@FXML
私人HBox hiddenMenu;
@FXML
私人色彩采集器;
@FXML
自有品牌lblColor;
@FXML
自有品牌lblSize;
@FXML
私人滑杆;
选择私有形状;
private List selectionList=新建LinkedList();
私有静态主窗口主窗口;
私人小贩小贩;
私人观察者人物;
私人艺术界;
@凌驾
public void start(舞台场景)引发异常{
MainWindow.MainWindow=这个;
figureHandler=figureHandler.getInstance();
figureHandler.setMainWindow(主窗口);
root=FXMLLoader.load(getClass().getResource(“../grafik/mainWindow.fxml”);
场景.setTitle(“你好世界”);
scene.setScene(新场景(root,800600));
scene.show();
}
public void addLargeCircle(){
圆圈=新圆圈();
圆。设定半径(100);
圆形。设置填充(颜色。红色);
圆圈.addEventHandler(MouseEvent.MOUSE_单击,e->{
System.out.println(“Ett-klick skedde påcirklen!”);
hiddenMenu.setVisible(假);
});
圆圈.addEventHandler(MouseEvent.MOUSE_拖动,e->{
移动圆(e,圆);
});
root.getChildren().add(圆);
//圆。添加(圆);
//figureHandler.addCircleToList(圆形);
}
@凌驾
公共void初始化(URL、ResourceBundle、ResourceBundle){
figures=FXCollections.observableArrayList(“小圆圈”、“中圆圈”、“大圆圈”);
选择FigureComboBox.setItems(数字);
圆圈=新的ArrayList();
cp.setValue(颜色为红色);
cp.setOnAction(e->{
System.out.println(“更改颜色”);
});
}
//跳过一些与问题无关的方法


预计不会显示,我得到的是NPE。

主要问题是我使用了以下代码:

root = FXMLLoader.load(getClass().getResource("../grafik/mainWindow.fxml"));
而不是此代码:

FXMLLoader loader = new FXMLLoader(getClass().getResource("/grafik/mainWindow.fxml"));
mainWindowRoot = loader.load();

一旦我解决了这个问题,一切都开始工作了!感谢您的帮助和反馈,我已经针对您的评论更正了相应的解决方案!

不知道这是否是问题所在,但请注意,调用
start
main窗口
实例与用于FXML控制器的实例不同。
当您指定
fx:controller
属性时,fxmloader
将创建控制器类的新实例。将
应用程序
类用作FXML控制器通常不是一个好主意。没有关于如何调用
addLargeCircle
的信息。我假设它位于不同的FXML中,而不是包含
的FXML中>HBox
?!旁注:调用舞台场景(
舞台场景
)会让人困惑。