【问题标题】:Java C/S Application preloader (like Ajax)Java C/S 应用程序预加载器(如 Ajax)
【发布时间】:2023-03-26 09:03:01
【问题描述】:

我想在 Java 桌面应用程序(我使用 Swing)中实现“等待”预加载消息,就像 Ajax/Flash 开发人员在 Web 应用程序中使用的预加载器一样。

我的应用程序使用客户端/服务器架构,从一个窗口移动到另一个窗口时可能会有一些延迟,因为服务器的响应时间,但是用户应该不能做任何事情,直到所有内容已加载

这样做的最佳做法是什么? 我有两个想法,但我认为应该有更好的方法来处理这个问题:

1 个想法)阻塞 Event Dispatcher 线程(这可能吗?)

另一种想法)隐藏整个JFrame,直到与服务器的消息交换完成并且内容准备好,显示另一个“等待”JFrame,但我不太喜欢这种解决方案,因为主JFrame会一直闪烁开/关在用户交互期间

编辑:感谢一些提示,我想通了,但我不能给任何人答案(实际上没有人回答,我只有 cmets!),我应该投票删除这个问题吗?

【问题讨论】:

  • (block EDT) " (这可能吗?)" 容易,但不要。改为显示模式对话框。
  • @AndrewThompson 但是对于模态对话框,如果 JFrame 仍然显示在背景上,用户可以单击某处,从而弄乱应用程序逻辑(我知道,它不是很健壮,但它应该很简单)
  • " 用户可以点击某处," 他们可以点击任何他们喜欢的地方。他们可以单击对话框以将其和应用程序带入。到前面,或单击框架中的任意位置以听到一个愉快的小“叮”声,上面写着“不要单击此”。
  • 是的,就像@AndrewThompson 建议的那样,只要框架(在后台)没有准备好,就显示JDialog 是你最好的选择。在那之前不要让用户关闭对话框。
  • 这是处理不确定延迟的最小example。您可以answer your own question 或编辑您的问题以包含sscce

标签: java swing splash-screen preloader


【解决方案1】:

我使用 JDialog 解决了这个问题,使用 setVisible(true/false) 并拒绝用户通过按下 X 按钮关闭对话框的可能性,使用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

public class PreloaderDialog extends JDialog {              

        publicPreloaderDialog() {

                initialize();
        }

        public final void initialize() {

                JLabel waittext = new JLabel("Wait, please");    
                add(waittext);

                setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                setModalityType(ModalityType.APPLICATION_MODAL);

                setTitle("Loading in progress");

                setLocationRelativeTo(null);
                setSize(300, 120);
        }

        public void hide() {

           setVisible(false);                               
        }

        public void show() {                                       

            setVisible(true);                               
        }

}

【讨论】:

  • 恭喜! :) 有机会请accept回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多