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

在MobileApplication.postInit()中调用Dialog无显示 如何实现启动密码校验

问题根因

你写的代码无法正常运行的核心原因是UI线程阻塞:MobileApplication.postInit执行时,应用主窗口的初始化渲染流程还未完成,此时直接调用showAndWait()会阻塞JavaFX UI线程,既卡住了主视图的渲染,也导致Dialog无法完成弹出绘制。

正确实现方式

方案1:延迟弹出Dialog,等主场景初始化完成后显示

如果可以接受主视图先展示再弹出密码框,用Platform.runLater()把Dialog弹出逻辑放到UI线程任务队列尾部,等主场景渲染完成后再执行:

public void postInit(Scene scene) {
    // 主场景初始化完成后再执行Dialog弹出逻辑
    Platform.runLater(() -> {
        new CustomDialog().showAndWait();
        // 后续执行文件解密、主视图数据加载逻辑
    });
}

方案2:先隐藏主视图,密码验证通过后再显示

如果要求必须验证密码后才能看到主视图,可以先将主窗口设置为不可见,等密码验证通过后再展示:

public void postInit(Scene scene) {
    // 先隐藏主窗口
    scene.getWindow().hide();
    
    Platform.runLater(() -> {
        Optional<ButtonType> result = new CustomDialog().showAndWait();
        // 验证用户输入的密码正确后再显示主窗口
        if (result.isPresent() && result.get() == ButtonType.OK) {
            // 执行文件解密逻辑
            scene.getWindow().show();
        } else {
            // 密码验证失败/用户取消,直接退出应用
            Platform.exit();
        }
    });
}

注意事项

  • 不要在Dialog弹出前执行文件解密等耗时操作,所有耗时逻辑要放到密码输入完成后的回调中异步执行,避免卡住UI
  • 要给Dialog增加关闭拦截逻辑,避免用户直接关闭Dialog后应用无响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:06:00