InvokeExample.java Source code

Java tutorial

Introduction

Here is the source code for InvokeExample.java

Source

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class InvokeExample {
    private static JButton good = new JButton("Good");

    private static JButton bad = new JButton("Bad");

    private static JButton bad2 = new JButton("Bad2");

    private static JLabel resultLabel = new JLabel("Ready", JLabel.CENTER);

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel();
        p.add(good);
        p.add(bad);
        p.add(bad2);

        Container c = f.getContentPane();
        c.setLayout(new BorderLayout());
        c.add(p, BorderLayout.CENTER);
        c.add(resultLabel, BorderLayout.SOUTH);

        good.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                resultLabel.setText("Working . . .");
                setEnabled(false);
                Thread worker = new Thread() {
                    public void run() {
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException ex) {
                        }

                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                resultLabel.setText("Ready");
                                setEnabled(true);
                            }
                        });
                    }
                };
                worker.start();
            }
        });

        bad.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                resultLabel.setText("Working . . .");
                setEnabled(false);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException ex) {
                }
                resultLabel.setText("Ready");
                setEnabled(true);
            }
        });

        bad2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                resultLabel.setText("Working . . . ");
                setEnabled(false);
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        try {
                            Thread.sleep(5000); // Dispatch thread is starving!
                        } catch (InterruptedException ex) {
                        }

                        resultLabel.setText("Ready");
                        setEnabled(true);
                    }
                });
            }
        });

        f.setSize(300, 100);
        f.setVisible(true);
    }

    // Allows us to turn the buttons on or off while we work.
    static void setEnabled(boolean b) {
        good.setEnabled(b);
        bad.setEnabled(b);
        bad2.setEnabled(b);
    }
}