猿问

由于 FXML 文件中的控制器更改而导致线程异常

我有一个多场景程序。我已经完成了 GUI 和按钮(允许更改窗口)的工作。随着我的程序的进展,我不希望每个方法都在同一个控制器上。当我更改 FXML 文件响应的控制器时,我收到一个我不明白的拥抱错误。


这是我的 module-info.java 文件。


module Genesis {

requires javafx.fxml;

requires javafx.controls;

opens genesismx;}

与我想要连接到其他控制器的窗口相对应的 FXML 文件是这样的(与问题相关的部分):


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

<?import javafx.geometry.Insets?>

<?import javafx.scene.control.Button?>

<?import javafx.scene.control.ComboBox?>

<?import javafx.scene.control.Label?>

<?import javafx.scene.control.RadioButton?>

<?import javafx.scene.control.TextField?>

<?import javafx.scene.control.ToggleGroup?>

<?import javafx.scene.layout.ColumnConstraints?>

<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.layout.HBox?>

<?import javafx.scene.layout.Pane?>

<?import javafx.scene.layout.RowConstraints?>

<?import javafx.scene.text.Font?>


<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="720.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" 

///

fx:controller="genesismx.menuAgregarDatos.datos"></GridPane>

在我改变控制器之前是这样的:


<GridPane fx:controller="genesismx.menupController"></GridPane>

文件连接到的控制器是这样的(menupController.java):


package genesismx;


import javafx.event.ActionEvent;

import javafx.fxml.FXMLLoader;

import javafx.scene.Node;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;

import java.io.IOException;


public class menupController {

    public void aPantPago(ActionEvent event) throws IOException {

        Parent root = FXMLLoader.load(getClass().getResource("menuAgregarDatos/AgregarPago.fxml"));

        Scene menupScene = new Scene(root);

        //Para conseguir la info del stage

        Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();

        window.setScene(menupScene);

        window.show();

    }}

其中“Parent root =” .... 的部分是我应该收到错误的行。


UYOU
浏览 101回答 2
2回答

翻阅古今

opens/exports以每个包为基础工作。你导出的是,但不是包含( )genesismx的包。(包和在java中是完全独立的包;前者不被认为是后者包的一部分。)genesismx.menuAgregarDatos.datosgenesismx.menuAgregarDatosgenesismx.menuAgregarDatosgenesismx您的以下行module-info允许FXMLLoader访问控制器类的成员以注入数据:opens&nbsp;genesismx.menuAgregarDatos&nbsp;to&nbsp;javafx.fxml;注意:我强烈建议遵守 java 命名约定:类型名称应以大写字母开头。

慕仙森

我认为出现这种情况是由于这个尝试从根包设置正确的路径:-package genesismx;import javafx.event.ActionEvent;import javafx.fxml.FXMLLoader;import javafx.scene.Node;import javafx.scene.Parent;import javafx.scene.Scene;import javafx.stage.Stage;import java.io.IOException;public class menupController {&nbsp; &nbsp; public void aPantPago(ActionEvent event) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; Parent root = FXMLLoader.load(getClass().getResource("/genesismx/menuAgregarDatos/AgregarPago.fxml"));&nbsp; &nbsp; &nbsp; &nbsp; Scene menupScene = new Scene(root);&nbsp; &nbsp; &nbsp; &nbsp; //Para conseguir la info del stage&nbsp; &nbsp; &nbsp; &nbsp; Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();&nbsp; &nbsp; &nbsp; &nbsp; window.setScene(menupScene);&nbsp; &nbsp; &nbsp; &nbsp; window.show();&nbsp; &nbsp; }}您可以学习 MVC(模型-视图-控制器)技术吗?这将是您的最佳选择,并且非常容易实现,因为目录流可以让您更好地了解应用程序中的数据流。谢谢。
随时随地看视频慕课网APP

相关分类

Java
我要回答