java - 在 Swing 中显示一个弹出窗口,指示程序启动的进度

标签 java swing jframe jpanel jdialog

我有一个 JFrame 类,它的构造函数将花费一点时间(在某些情况下)来创建所有适当的对象。

我想做的是在主 panel 显示之前,我将有一个名为 toaster 的弹出窗口,它会说明我在程序执行的哪个阶段.这是我的构造函数:

public class GUI extends javax.swing.JFrame {        
    public GUI() {
        JOptionPane toasterPane = new JOptionPane(null,
                JOptionPane.INFORMATION_MESSAGE,
                JOptionPane.DEFAULT_OPTION,
                null,
                new Object[]{},
                null);

        JDialog toaster = new JDialog();
        toaster.setTitle("Loading...");
        toaster.setModal(false);
        toaster.setContentPane(toasterPane);
        toaster.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        toaster.pack();
        toaster.setVisible(true);

        toasterPane.setMessage("Initializing Components...");
        initComponents();

        toasterPane.setMessage("Redirecting Console...");
        _mc = new MessageConsole(jMessageConsoleTextPane, true);
        _mc.redirectOut(null, null);
        _mc.redirectErr(Color.RED, null);
        _mc.setMessageLines(100);

        toasterPane.setMessage("Connecting To Database...");
        _user = new User("root", "");
        _connector = new Connector(_user, "localhost", 3306);
        _database = new SQLDatabase("testing", _connector);        
        updateComboBoxes();

        toaster.setVisible(false);
    }
//rest of the code here
}

现在的问题是,它没有向我显示消息,而是显示如下:

blank

程序加载后,它将显示最后一条消息(您可以通过注释掉 toaster.setVisible(false) 来看到),如下所示:

message

那么知道我在这里做错了什么吗?

最佳答案

您正在阻止 事件调度线程 (EDT),因此在数据库访问完成执行之前,GUI 无法重新绘制自身。基本上你需要使用一个单独的线程来访问数据库。

阅读 Concurrency 上的 Swing 教程部分获取更多信息和使用 Swing Worker 的解决方案。

关于java - 在 Swing 中显示一个弹出窗口,指示程序启动的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970796/

相关文章:

java - 删除默认的 JFrame 图标

java - 使用 simpleDateFormat java 解析日期

JavaFX 使用 JFoenix 框架更改关闭选项卡按钮颜色

java - 通过 Java 运行时运行时,Microsoft C++ 中缺少启动横幅

java - Swing 中的内存泄漏

java - 如何在java中保存绘图面板中的图像?

java - 如何将 javax 记录器句柄设置为重构敏感

java - Graph Zoom jScrollPane 和 Visualization Viewer 依赖项

java - 仅当 JFrame 在屏幕上可见时才执行代码提前执行

java - 如何在 JFrame 中分隔面板以分隔类