Search code examples
javaswingworker

where SwingWorker should be in the class


i have 2 class. One for GUI, and anther for reading file with updating it, to the JTable ,but it take long time. I would like to use SwingWorker to fix the issue. i found tutorials like this one SwingWorker, but still i don't get it. where do i have to use SwingWorker; is it in the reading class or GUI class, i never ever try it and i don't know any thing about it; I tried to google every where, buti need very simple example "the simplest) in other word where to start


Solution

  • Here is a minimal example. It is a program displaying a dummy progress in a JLabel :

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.SwingUtilities;
    import javax.swing.SwingWorker;
    
    
    public class GUI extends JFrame {
    
        private JLabel lblProgress = new JLabel("0%");
    
        public GUI() {
           setTitle("Swing worker example");
           setSize(300, 200);    
           add(lblProgress);
           new Process().execute();
        }
    
    
        public static void main(String[] args) {
           SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    GUI gui = new GUI();
                    gui.setVisible(true);
                }
            });
        }
    
        class Process extends SwingWorker<String, String> {
    
            @Override
            protected String doInBackground() throws InterruptedException {
                int count = 10000;
                for (int i = 0; i < count; i++) {
                    int progress = (int) ((double) i/count*100.0);
                    lblProgress.setText(progress + "%");
                    repaint();
                    Thread.sleep(10);
                }
                return null;
            }
    
            @Override
            protected void done() {
                lblProgress.setText("Finished!");
            }
         }
    
     }