Update JProgressBar from a SwingWorker [closed]

℡╲_俬逩灬. 提交于 2021-01-29 07:00:52

问题


I am new to Java and trying to build an application that receives 6 inputs from JSwing TextFields. I have around 5 checkboxes. Based on the selection, some of the details are fetched from database. All other things are working now, but I want to place a progress bar that updates the value based on the progress. I tried manually updating the ProgressBars with progressBar.setValue(0) to progressBar.setValue(100) across checkboxes. But it did not get updated. After going through some of the articles online, I found using swing worker from this link. I tried Robin's solution. How do I make my SwingWorker example work properly? . It creates a separate dialog but, it is empty.

Showing Progress like this

Is there a way I can set progress bar updating in my program?

        jButton1 = new javax.swing.JButton();
        jButton1.addActionListener(new ActionListener() {
            @Override
            
            public void actionPerformed(ActionEvent e) {
            
                    progressBar.setValue(0);


                 if(Sizing_details.isSelected()) {
                        
                         progressBar.setValue(20); 
                        
                         
                    }

Then I tried using swing worker from the link I mentioned.

                    public void actionPerformed(ActionEvent e) {
            
                    new GuiWorker().execute();

The dialog is struck and nothing shows up. But Functionality wise it works. Could you please help me how I can fix it.

I have two questions.

  1. Is it possible to update ProgressBar manually whenever I set them inside a checkbox under submit button action. ?
  2. If I have to use swing worker, is it possible to add a progressbar in the same frame and manipulate it.

EDIT I:

I can make the Progress bar pop up. However, When I call the "go" method from the link below SwingWorker ProgressBar

inside my Jbutton action event , it shows a blank screen.

But when I call the same method inside run method it works fine.

            java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() { go();
                try {
                    new JFrame_Demo().setVisible(true);
                    jButton1.addActionListener(new ActionListener() {
                        
                        public void actionPerformed(ActionEvent e) {
                            
                            
                        
                                

The above code works. it initialises a progress bar.

              java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() { 
                try {
                    new JFrame_Demo().setVisible(true);
                    jButton1.addActionListener(new ActionListener() {
                        
                        public void actionPerformed(ActionEvent e) {
                            
                            go();
                        
                                

the above code shows a blank white screen.

    import java.awt.Color;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.AbstractAction;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.ibm.java.diagnostics.utils.plugins.Container;
import com.ibm.jvm.trace.format.api.Component;
import com.sun.tools.javac.util.List;

import javax.swing.JToolBar;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import dbutility.*;

    public class JFrame_Demo extends javax.swing.JFrame {
        
        
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        /**
         * Creates new form JFrame_Demo
         * @throws IOException 
         * @throws FontFormatException 
         * @throws InterruptedException 
         */
        
        public JFrame_Demo() throws FontFormatException, IOException, InterruptedException {
            
            
            setTitle("Database Statistics Execution");
            initComponents();
            getContentPane().setBackground(Color.WHITE);
            setBackground(Color.white);
            setResizable(false);
            setSize(800,800);
            
           pack();
            setVisible(true);
         
        }
        
        
        
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         * @throws IOException 
         * @throws FontFormatException 
         * @throws InterruptedException 
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        private void initComponents() throws FontFormatException, IOException, InterruptedException {
            Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("lib\\Font\\3ds_Regular.otf")).deriveFont(12f);
         
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ge.registerFont(customFont);
            
            DBUser_Input = new javax.swing.JLabel();
           
            DBUser_Input.setFont(customFont);
            
            DBUser_Input.setToolTipText("Database System User");
            Schema = new javax.swing.JTextField();
            space_user_lable = new javax.swing.JLabel();
            space_user_lable.setFont(customFont);
            jLabel4 = new javax.swing.JLabel();
            jLabel4.setFont(customFont);
            jLabel5 = new javax.swing.JLabel();
            jLabel5.setFont(customFont);
            Username = new javax.swing.JTextField();
            Instance = new javax.swing.JTextField();
            syspassword = new javax.swing.JPasswordField();
            schema_password = new javax.swing.JPasswordField();
            jButton1 = new javax.swing.JButton();
            JProgressBar pb = new JProgressBar();
            getContentPane().add(pb);
            jButton1.addActionListener(new ActionListener() {
                @Override
                
                
                public void actionPerformed(ActionEvent e ) {
                    new GuiWorker().execute();
                
                    String schema = Schema.getText();
                    String Schema_Password = schema_password.getText();
                    String port = Port.getText();
                    String instance = Instance.getText();
                    String Host = host.getText();
                    String URL = "jdbc:oracle:thin:@"+Host+":"+port+":"+instance;
                    String dbpassword = syspassword.getText();
                    String username = Username.getText();
                    
                    
                    try {
                        Class.forName("oracle.jdbc.OracleDriver");
                        Connection con = DriverManager.getConnection(URL,username,dbpassword);
                    if(Exp_Schema_Check.isSelected()) {
                            // PROGRESS BAR TO BE SET TO 20
                            //Execute 20 database queries....
                            
                            
                    }
                        if(DB_Parameters_Sizing_Details.isSelected()) {
                            // PROGRESS BAR TO BE SET TO 50
                             //Execute 12 Database queries
                            
                             
                        }
                        
                        
                    if(Redo_Log.isSelected()) {
                        PROGRESS BAR TO BE SET TO 75
                        //... Execute 35 queries. . 

                    }
                        } catch (ClassNotFoundException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        } catch (SQLException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                     
                    System.exit(0);
                        
                        
                    }
                
                
                }
            
                    );
            
                 
            Exp_Schema_Check = new javax.swing.JCheckBox();
            DB_Parameters_Sizing_Details = new javax.swing.JCheckBox();
            DB_Parameters_Sizing_Details.setFont(customFont);
            Redo_Archive_Details = new javax.swing.JCheckBox();
            Redo_Archive_Details.setFont(customFont);
            Session_Details = new javax.swing.JCheckBox();
            Session_Details.setFont(customFont);
            Tablespaces_Details = new javax.swing.JCheckBox();
            Tablespaces_Details.setFont(customFont);
            SPM_Performance_Details = new javax.swing.JCheckBox();
            SPM_Performance_Details.setFont(customFont);
            
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

            DBUser_Input.setText("Enter Database System Username");

            Schema.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField1ActionPerformed(evt);
                }
            });
            
            space_user_lable.setText("Enter 3DSpace Username");

            jLabel4.setText("Enter Instance Name");

            jLabel5.setText("Enter 3DSpace Password");

            Username.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField2ActionPerformed(evt);
                }
            });

            Instance.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField4ActionPerformed(evt);
                }
            });
            
                        
            jButton1.setText("Submit");

            Exp_Schema_Check.setText("Exp_Schema_Check");
            Exp_Schema_Check.setFont(customFont);

            DB_Parameters_Sizing_Details.setText("DB_Parameters_Sizing_Details");

            Redo_Archive_Details.setText("Redo_Archive_Details");

            Session_Details.setText("Session_Details");

            Tablespaces_Details.setText("Tablespaces_Details");

            SPM_Performance_Details.setText("SPM_Performance_Details");
            
            JLabel Hostname = new JLabel();
            Hostname.setFont(customFont);
            Hostname.setText("Enter the Database Hostname");
            
            host = new JTextField();
            
            JLabel lblEnterTheDatabase = new JLabel();
            lblEnterTheDatabase.setFont(customFont);
            lblEnterTheDatabase.setText("Enter the Database Port");
            
            Port = new JTextField();
            
            JLabel syspass_label = new JLabel();
            syspass_label.setFont(customFont);
            syspass_label.setText("Enter Database System Password");
            
            JLabel lblPoweredByDs = new JLabel();
            lblPoweredByDs.setForeground(new Color(51, 102, 204));
            lblPoweredByDs.setToolTipText("Database System User");
            lblPoweredByDs.setFont(customFont);
            lblPoweredByDs.setFont(customFont);
            
            lblPoweredByDsgs = new JLabel();
            lblPoweredByDsgs.setForeground(new Color(0, 153, 255));
            lblPoweredByDsgs.setText("Powered By DSGS Infra Team");
            lblPoweredByDsgs.setFont(null);
            
            selectall = new JCheckBox("Select All");
           
           
            selectall.addItemListener(new ItemListener() {

                @Override
                public void itemStateChanged(ItemEvent arg0) {

                    if(selectall.isSelected()) {
                        Exp_Schema_Check.setSelected(true);
                        DB_Parameters_Sizing_Details.setSelected(true);
                        Redo_Archive_Details.setSelected(true);
                        Session_Details.setSelected(true);
                        SPM_Performance_Details.setSelected(true);
                        Tablespaces_Details.setSelected(true);
                        
                    }
                    
                    else if(selectall.isSelected()==false) {
                        Exp_Schema_Check.setSelected(false);
                        DB_Parameters_Sizing_Details.setSelected(false);
                        Redo_Archive_Details.setSelected(false);
                        Session_Details.setSelected(false);
                        SPM_Performance_Details.setSelected(false);
                        Tablespaces_Details.setSelected(false);
                        
                    }
                        
                    
                }
                
            });
            
            progressBar = new JProgressBar();
            progressBar.setStringPainted(true);
            
            
            
                

                
            
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            layout.setHorizontalGroup(
                layout.createParallelGroup(Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addComponent(jLabel4)
                                    .addComponent(space_user_lable)
                                    .addComponent(Hostname)
                                    .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                        .addGroup(layout.createSequentialGroup()
                                            .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                                .addComponent(DBUser_Input)
                                                .addComponent(jLabel5))
                                            .addGap(105)
                                            .addGroup(layout.createParallelGroup(Alignment.TRAILING, false)
                                                .addComponent(Username, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                                .addComponent(Schema, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
                                                .addComponent(schema_password, Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                                                .addComponent(Instance, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
                                                .addComponent(host, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
                                                .addComponent(syspassword, Alignment.LEADING)
                                                .addComponent(Port, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)))
                                        .addComponent(lblPoweredByDs, Alignment.TRAILING, GroupLayout.PREFERRED_SIZE, 149, GroupLayout.PREFERRED_SIZE)))
                                .addContainerGap(1427, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(syspass_label, GroupLayout.DEFAULT_SIZE, 1312, Short.MAX_VALUE)
                                .addGap(612))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(30)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(selectall)
                                .addGap(381)
                                .addComponent(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                            .addComponent(Exp_Schema_Check)
                            .addComponent(DB_Parameters_Sizing_Details)
                            .addComponent(Redo_Archive_Details)
                            .addComponent(Session_Details)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addComponent(SPM_Performance_Details)
                                    .addComponent(Tablespaces_Details))
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(182)
                                        .addComponent(jButton1))
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(381)
                                        .addComponent(lblPoweredByDsgs, GroupLayout.PREFERRED_SIZE, 185, GroupLayout.PREFERRED_SIZE)))))
                        .addContainerGap(1161, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(lblEnterTheDatabase, GroupLayout.PREFERRED_SIZE, 170, GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(1754, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(DBUser_Input)
                            .addComponent(Username, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(48)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(syspass_label, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE)
                            .addComponent(syspassword, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(58)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(space_user_lable)
                            .addComponent(Schema, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(45)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(jLabel5)
                            .addComponent(schema_password, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(44)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(Instance, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(44)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(Hostname)
                            .addComponent(host, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addGap(18)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblEnterTheDatabase)
                            .addComponent(Port, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(ComponentPlacement.RELATED, 75, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(Alignment.TRAILING)
                            .addComponent(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addComponent(selectall))
                        .addGap(18)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addGroup(Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(Exp_Schema_Check)
                                .addGap(18)
                                .addComponent(DB_Parameters_Sizing_Details)
                                .addGap(18)
                                .addComponent(Redo_Archive_Details)
                                .addGap(18)
                                .addComponent(Session_Details)
                                .addGap(18)
                                .addComponent(SPM_Performance_Details)
                                .addGap(18)
                                .addComponent(Tablespaces_Details))
                            .addGroup(Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(jButton1)
                                .addPreferredGap(ComponentPlacement.RELATED)
                                .addComponent(lblPoweredByDsgs)))
                        .addGap(49)
                        .addComponent(lblPoweredByDs, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
            );
            getContentPane().setLayout(layout);
            

            pack();
            
            
        }// </editor-fold>//GEN-END:initComponents
        
    
        private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed
            // TODO add your handling code here:
            
        }//GEN-LAST:event_jTextField1ActionPerformed

        private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField2ActionPerformed
            // TODO add your handling code here:
        }//GEN-LAST:event_jTextField2ActionPerformed

        private void jTextField4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField4ActionPerformed
            // TODO add your handling code here:
        }//GEN-LAST:event_jTextField4ActionPerformed

        /**
         * @param args the command line arguments
         * @return 
         * @return 
         * @throws InterruptedException 
         */
        
        
        public static void main(String args[]) {
             
            
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>

            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        
                        
                        new JFrame_Demo().setVisible(true);
                        
                    } catch (FontFormatException | IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                }
            });
        }
        

                       
            
         

        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JButton jButton1;
        private javax.swing.JCheckBox Exp_Schema_Check;
        private javax.swing.JCheckBox DB_Parameters_Sizing_Details;
        private javax.swing.JCheckBox Redo_Archive_Details;
        private javax.swing.JCheckBox Session_Details;
        private javax.swing.JCheckBox Tablespaces_Details;
        private javax.swing.JCheckBox SPM_Performance_Details;
        private javax.swing.JLabel DBUser_Input;
        private javax.swing.JLabel dbpassword1;
        private javax.swing.JLabel space_user_lable;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JLabel jLabel5;
        private javax.swing.JPasswordField syspassword;
        private javax.swing.JPasswordField schema_password;
        private javax.swing.JTextField Schema;
        private javax.swing.JTextField Username;
        private javax.swing.JTextField Instance;
        private JTextField host;
        private JTextField Port;
        HSSFWorkbook workbook = new HSSFWorkbook();
        private JLabel lblPoweredByDsgs;
        private JCheckBox selectall;
        private JProgressBar progressBar;
    }
    

Thank you very much.


回答1:


SwingWorker is used for running long tasks. This is not the case here so you do not need one.
The following is mre (1) of what you are trying to achieve:

import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

public class SwingMain {

    SwingMain() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.add(new TestPanel());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new SwingMain();
    }
}

class TestPanel extends JPanel {

    private final List<JCheckBox> checkBoxes;

    public TestPanel() {

        checkBoxes = new ArrayList<>();
        for (int i=0; i<5; i++){
            JCheckBox cb = new JCheckBox();
            checkBoxes.add(cb);
            add(cb);
        }

        JProgressBar pb = new JProgressBar();
        add(pb);

        JButton btn = new JButton("Check");
        btn.addActionListener(evt ->  pb.setValue(countCheckedBoxes()* 100/checkBoxes.size()));
        add(btn);
    }

    private int countCheckedBoxes() {

        int counter = 0;
        for(JCheckBox cb : checkBoxes){
            if(cb.isSelected()) {
                counter++;
            }
        }
        return counter;
    }

    /* a more concise version using stream: 
    private int countCheckedBoxes() {
        return (int) checkBoxes.stream().filter(cb->cb.isSelected()).count();
    }
    */
}
 

EDIT: If you need to update progress of a long process use SwingWorker:

import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

public class SwingMain {

    SwingMain() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.add(new TestPanel());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new SwingMain();
    }
}

class TestPanel extends JPanel {

    private final JProgressBar pb;
    private final JButton btn;

    public TestPanel() {

        pb = new JProgressBar();
        add(pb);

        btn = new JButton("Run long process");
        btn.addActionListener(evt ->  new ProgressUpdateTask().execute());
        add(btn);
    }

    class ProgressUpdateTask extends SwingWorker<Void, Integer> {


        @Override
        protected void process(List<Integer> chunks) {
            int i = chunks.get(chunks.size()-1);
            pb.setValue(i); // The last value in this array is all we care about.
        }

        @Override
        protected Void doInBackground() throws Exception {
            btn.setEnabled(false);
            for(int i = 0; i < 100; i++) {
                Thread.sleep(50); //simulate long process
                publish(i);
            }
            btn.setEnabled(true);
            return null;
        }
    }
}

(1) Always consider posting an MRE when asking and answering.

来源:https://stackoverflow.com/questions/63612798/update-jprogressbar-from-a-swingworker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!