如何将EventObjects与SwingWorker进度条组合?

时间:2016-04-24 11:16:13

标签: java swing events progress-bar swingworker

在我的项目中,我有一个中央数据库类。每次访问数据库时,我都想显示一个不确定的进度条。到目前为止,我设法建立了所有机制,让数据库在打开和关闭连接时触发事件。您可以找到详细信息here

据我所知,SwingWorker需要让Swing代码像进度条的动画一样运行而其他代码在后台执行。我还读到你在doInBackground()方法中启动长时间运行的进程,这在我的情况下是没有必要的,因为数据库访问的长时间运行过程已经开始了。

我无法让SwingWorker部分解决方案正常工作。动画在连接已关闭时启动,并且每次访问数据库时都会打开一个新的框架:

Several frames opened

以下是代码:

public class UI_DbProgressbar implements Db_ActionListener{

    public void DbActionReceived(final Db_ActionEvent event) {

            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setLayout(new FlowLayout());
            frame.setLocationRelativeTo(null);

            final JProgressBar jProgressBar = new JProgressBar();
            final JLabel status = new JLabel("Connecting...");
            frame.add(status);
            frame.add("jProgressBar", jProgressBar);

            frame.pack();

        if(event.Status() == Db_Status.CONNECTED)
        {
            System.out.println("DB is connected!"); 

            frame.setVisible(true);

            SwingWorker sw = new SwingWorker() 
            {
                @Override
                protected Object doInBackground() throws Exception 
                {
                    jProgressBar.setIndeterminate(true);
                    System.out.println("In progress!");
                    while(event.Status() != Db_Status.CLOSED);
                    return null;
                }

                @Override
                public void done()
                {
                    jProgressBar.setIndeterminate(false);
                    status.setText("Successful");
                    jProgressBar.setValue(100); // 100%
                }
            };
            sw.execute(); 

        }
        else if(event.Status() == Db_Status.CLOSED)
        {
            System.out.println("DB connection is closed!");
            frame.dispose();
        }        
        else
        {
            System.out.println("DB idle!" );
        }
    }
}

我需要SwingWorker才能获得动画进度条 - 是否真的有必要使用SwingWorker完成此任务?我的错是什么?

0 个答案:

没有答案