You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX满足条件时如何切换场景?登录成功跳转Dashboard失效如何解决

问题原因分析
  • 核心故障点:你在validatelogin方法中调用switchtoSC1(null)传入了空参数,执行switchtoSC1内的event.getSource()代码时会直接触发NullPointerException,方法直接中断运行,自然无法完成场景跳转,你可以查看IDE控制台,会有对应的空指针异常报错信息。
  • 次要隐患:你的JDBC驱动加载顺序错误,Class.forName("com.mysql.jdbc.Driver")需要放在DriverManager.getConnection之前,否则可能出现驱动未注册的异常。
修复方案

方案1:修改switchtoSC1方法,不依赖ActionEvent参数

不需要传入事件对象,直接用登录页已有的控件获取窗口即可,比如你代码中已经声明的loginmessagelabel控件:

public void switchtoSC1() throws IOException {
    Parent root = FXMLLoader.load(getClass().getResource("Dashboard.fxml"));
    // 直接从当前页面现有控件获取窗口,不需要事件对象
    stage = (Stage) loginmessagelabel.getScene().getWindow();
    scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}

对应调用处修改为switchtoSC1();,不需要再传null参数。

方案2:保留ActionEvent参数,调用时传入合法事件对象

如果你的validatelogin方法是绑定给登录按钮的点击事件的,可以直接给validatelogin增加ActionEvent参数,调用时直接传入该参数即可:

// 方法签名增加ActionEvent参数,绑定按钮点击事件时会自动传入该对象
public void validatelogin(ActionEvent event) throws SQLException, ClassNotFoundException, IOException {
    // 原有业务代码不变
    String jdbcURL = "jdbc:mysql://localhost/medibase";
    String dbUsername = "root";
    String dbPassword = "0852";
    // 修正驱动加载顺序
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection = DriverManager.getConnection(jdbcURL,dbUsername,dbPassword);
    String uname = username1.getText();
    String psd = password1.getText();
    pst=connection.prepareStatement("SELECT * FROM user_account WHERE username=? and password=?");
    pst.setString(1, uname);
    pst.setString(2, psd);
    rs = pst.executeQuery();
    if(rs.next()){
        switchtoSC1(event); // 传入合法的事件对象
    } else{
        loginmessagelabel.setText("Login failed");
    }
    // 建议用完主动关闭数据库连接、PreparedStatement、ResultSet
}
额外优化建议
  • 不要在代码中硬编码数据库连接账号密码,建议放到独立配置文件中管理
  • 数据库不要明文存储用户密码,建议加密后再存储比对
  • 数据库连接、ResultSet、PreparedStatement使用完要及时关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者banchiSL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 03:00:03