Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class Main extends JFrame {

    private Timer timer;
    private JDialog blocker;

    public Main() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 200);
        blocker = new JDialog(this, true);
        blocker.setLayout(new FlowLayout());
        blocker.add(new JLabel("I'm blocking EDT!"));
        JProgressBar progress = new JProgressBar();
        progress.setIndeterminate(true);
        blocker.add(progress);
        blocker.pack();

        timer = new Timer(3000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doSomeWork();
            }
        });
        timer.setRepeats(false);
        timer.start();
    }

    private void doSomeWork() {
        Runnable runnable = new Runnable() {
            public void run() {
                showBlocker();
                try {
                    Thread.sleep(2000);
                } catch (Exception ex) {
                } finally {
                    hideBlocker();
                }
            }
        };
        new Thread(runnable).start();
    }

    private void showBlocker() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                blocker.setLocationRelativeTo(Main.this);
                blocker.setVisible(true);
            }
        });
    }

    private void hideBlocker() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                blocker.setVisible(false);
                timer.restart();
            }
        });
    }

    public static void main(String[] args) {
        new Main().setVisible(true);
    }
}