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

JavaFX 2.0 FXML资源加载错误

吴正祥
2023-03-14
@Override public void start(Stage primaryStage) {
        try {
            stage = primaryStage;
            gotoLogin();
            primaryStage.show();
        } catch (Exception ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    enter code here
    public User getLoggedUser() {
        return loggedUser;
    }

    public boolean userLogging(String userId, String password){
        if (Authenticator.validate(userId, password)) {
            loggedUser = User.of(userId);
            gotoProfile();
            return true;
        } else {
            return false;
        }
    }

    public void userLogout(){
        loggedUser = null;
        gotoLogin();
    }

    private void gotoProfile() {
        try {
            replaceSceneContent("../skinFolder/fxml/profile.fxml");
        } catch (Exception ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void gotoLogin() {
        try {
            replaceSceneContent("../skinFolder/fxml/login.fxml");
        } catch (Exception ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private Parent replaceSceneContent(String fxml) throws Exception {
        Parent page = (Parent) FXMLLoader.load(App.class.getResource(fxml), null, new JavaFXBuilderFactory());
        Scene scene = stage.getScene();
        if (scene == null) {
            scene = new Scene(page, 700, 450);
            scene.getStylesheets().add(App.class.getResource("../skinFolder/css/defaultSkin.css").toExternalForm());
            stage.setScene(scene);
        } else {
            stage.getScene().setRoot(page);
        }
        stage.sizeToScene();
        return page;
    }}

所以我尝试使用FXML登录示例的示例,只是我给出了FXML的其他方法。在fxml文件中,我给出了控制器的方法。

The log shows those errors:

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at javafx.fxml.FXMLLoader.loadType(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(Unknown Source)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(Unknown Source)
at javafx.fxml.FXMLLoader$Element.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at Main.App.replaceSceneContent(App.java:115)
at Main.App.gotoProfile(App.java:100)
at Main.App.userLogging(App.java:86)
at skinFolder.controllers.LoginController.processLogin(LoginController.java:28)

登录控制器类

public class LoginController {
    @FXML private TextField userId;
    @FXML private PasswordField password;
    @FXML private Label errorMessage;

    @FXML protected void processLogin() {
        if(!App.getInstance().userLogging(userId.getText(), password.getText())){
            errorMessage.setText("Username/password combination is invalid.");
        }
    }
}

第28行是:

if(!App.getInstance().userLogging(userId.getText(), password.getText())){

我提到fxml文件在另一个文件夹中,即主文件文件夹。我不明白为什么在使用Oracle给出的示例时会出现这个错误,但使用的是另一个文件夹结构!

我的应用程序文件夹结构:

  • 模型
  • 安全性
  • skinfolder-CSS
  • skinfolder-fxml
  • skinfolder-控制器

下面是profile.fxml代码:

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

<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?>

<AnchorPane id="Profile" styleClass="profile" xmlns:fx="http://javafx.com/fxml" fx:controller="skinFolder.controllers.ProfileController">
   <children>
    <Button maxHeight="2.0" text="Update" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="168.0" fx:id="update" onAction="#processUpdate"/>
    <Label layoutX="56.0" layoutY="77.0" text="Please review your profile data." fx:id="message" />
    <Label layoutX="56.0" layoutY="123.0" text="User:" />
    <Label layoutX="56.0" layoutY="224.0" text="Phone:" />
    <Label layoutX="56.0" layoutY="173.0" text="Email:" />
    <TextField editable="false" layoutX="149.0" layoutY="120.0" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="user" />
    <TextField editable="true" layoutX="149.0" layoutY="171" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="email" />
    <TextField layoutX="149.0" layoutY="224" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="phone" />
    <CheckBox layoutX="402" layoutY="120.0" text="Subscribed to NewsLetter" fx:id="subscribed" />
    <Separator layoutX="380" layoutY="110" prefHeight="155" orientation="vertical"/>
    <Hyperlink layoutY="24.0" text="logout" AnchorPane.rightAnchor="52.0" fx:id="logout" onAction="#processLogout"/>
    <Button disable="true" maxHeight="2" maxWidth="2.0" text="Continue" defaultButton="true" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="52.0" fx:id="Button" onAction="#processLogout"/>
    <Label layoutX="150.0" layoutY="401.0" opacity="0.0" text="Profile  successfully updated!" fx:id="success" />
    <Label layoutX="56.0" layoutY="284.0" text="Address:" />
    <TextArea maxHeight="2.0" maxWidth="2.0" minHeight="85.0" minWidth="448.0" prefHeight="85.0" prefWidth="448.0" AnchorPane.bottomAnchor="69.0" AnchorPane.leftAnchor="149.0" AnchorPane.rightAnchor="52.0" AnchorPane.topAnchor="289.0" fx:id="address" />
  </children>
  <styleClass>
    <String fx:value="profile" />
  </styleClass>
  <properties>
    <elementLockSel>
      <Boolean fx:value="true" />
    </elementLockSel>
  </properties>
</AnchorPane>

共有1个答案

胥良平
2023-03-14

我认为这与您前面的问题(JavaFX2.0从子文件夹加载fxml文件失败)有关。看这个答案。这里的processupdate操作也是如此。

 类似资料:
  • 这是我的应用程序的文件夹结构 在我的文件,我像这样加载字体和资源 对于这个,运行将给出退出代码0。 在我家。dart我有以下课程: 我在其他地方使用,以显示图像(代码省略): 这座大楼没有错误。颤振博士-v没有给出任何错误,颤振分析-v也没有给出任何错误。apk似乎构建得很好,但当应用程序在我的手机上打开时,我在asset_bundle中发现以下错误。投掷: 发生异常。错误(无法加载资源:imag

  • 问题内容: 在Eclipse中,当我运行代码时,此方法有效: 这是我的Package Explorer中的文件结构: 此外,此工作空间位于Z:\ eclipse_projects中 我可以看到 ImageIcon图标= new ImageIcon(“ src / Action-exit-icon.png”); 运行良好,而menuBar可以完成工作。 现在,我们导出该项目,然后我将JAR通过电子邮

  • 浏览器允许我们跟踪外部资源的加载 —— 脚本,iframe,图片等。 这里有两个事件: onload —— 成功加载, onerror —— 出现 error。 加载脚本 假设我们需要加载第三方脚本,并调用其中的函数。 我们可以像这样动态加载它: let script = document.createElement('script'); script.src = "my.js"; docume

  • CodeIgniter 的"自动加载"特性可以允许系统每次运行时自动初始化类库、辅助函数和模型。 如果你需要在整个应用程序中全局使用某些资源,为方便起见可以考虑自动加载它们。 支持自动加载的有下面这些: libraries/ 目录下的核心类 helpers/ 目录下的辅助函数 config/ 目录下的用户自定义配置文件 system/language/ 目录下的语言文件 models/ 目录下的模

  • 传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> 系统提供了专门的标签来简化上面的导入: {load href="/stati

  • 4.1 原生koa2实现静态资源服务器 4.2 koa-static中间件