【问题标题】:Progress Dialog in SwingWorkerSwingWorker 中的进度对话框
【发布时间】:2011-11-14 12:31:40
【问题描述】:

我有一个方法 register() 需要很长时间才能完成。所以我把它放在了swingworker的doInBackGround()中。同时,我想显示模态对话框并且上面有不确定的进度条。

private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    // TODO add your handling code here:
    WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
    dialog.addWindowListener(new java.awt.event.WindowAdapter() {


    });
    dialog.setVisible(true);
    SwingWorker worker = new SwingWorker() {

        @Override
        protected Object doInBackground() throws Exception {
            register();
            return 0;
        }
    };
    dialog.dispose();   
}

但一切都冻结了。在调试器中,我看到 regester() 没有被调用。我哪里搞砸了?任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: java multithreading swing swingworker concurrency


    【解决方案1】:

    modal 对话框上调用 setVisible(true) 后调用您的 dialog.dispose,因此可能永远不会调用 dispose。而是在 SwingWorker 中的 done 覆盖中调用 dispose 并在 SwingWorker 上调用 execute before 在对话框上调用 setVisible(true)。

    类似的东西(警告,代码未经测试):

    private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    
        WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
        dialog.addWindowListener(new java.awt.event.WindowAdapter() {
    
        });
        SwingWorker worker = new SwingWorker() {
    
            @Override
            protected Object doInBackground() throws Exception {
                register();
                return 0;
            }
    
            @Override
            protected void done() {
                dialog.dispose();
            }
        };
        worker.execute();
        dialog.setVisible(true);
    }
    

    【讨论】:

    • 感谢您的回答!似乎无法访问 register() 什么的。
    • @bunnyjesse112:那么您有一个完全独立的问题,然后是上面发布的问题,并且代码未显示。考虑提出关于 SO 的新问题,并提供有关此问题的相关信息,包括任何错误消息文本。还要检查 register 方法的范围。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多