How to display Progress bar for a procedure call

前端 未结 2 842
逝去的感伤
逝去的感伤 2021-01-25 23:28

I have data stored in Jtable, and then I am taking this data row by row and passing this data to a callable procedure in database(1 call for each row), and Procedure returns the

相关标签:
2条回答
  • 2021-01-25 23:56

    You need to use SwingWorker for updating UI while you do long background process.

    Read tutorail for SwingWorker and Concurency in Swing.

    0 讨论(0)
  • 2021-01-25 23:58

    You can use a SwingWorker to do the calls in the background and update the progress bar in the Event Dispatching Thread (a.k.a. EDT). Something like this:

    SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {
        @Override
        protected Void doInBackground() throws Exception {
            int processed = 0;
            DefaultTableModel model = (DefaultTableModel) data.getModel();
            for (int count = 0; count < model.getRowCount(); count++) {
                //...
                String messege = csmt.getString(4);
                processed++;
                publish(processed / model.getRowCount() * 100);
            }
            return null;
        }
    
        @Override
        protected void process(List<Integer> list) {
            progressBar.setValue(list.get(list.size() - 1));
        }
    };
    worker.execute();
    

    Take a look to Worker Threads and SwingWorker section in Concurrency in Swing trail.

    0 讨论(0)
提交回复
热议问题