SwingSuspendResume.java Source code

Java tutorial

Introduction

Here is the source code for SwingSuspendResume.java

Source

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class SwingSuspendResume extends JPanel implements Runnable {

    private static final String[] symbolList = { "|", "/", "-", "\\", "|", "/", "-", "\\" };

    private Thread runThread;

    private JTextField symbolTF;

    public SwingSuspendResume() {
        symbolTF = new JTextField();
        symbolTF.setEditable(false);
        symbolTF.setFont(new Font("Monospaced", Font.BOLD, 26));
        symbolTF.setHorizontalAlignment(JTextField.CENTER);

        final JButton suspendB = new JButton("Suspend");
        final JButton resumeB = new JButton("Resume");

        suspendB.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                suspendNow();
            }
        });

        resumeB.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                resumeNow();
            }
        });

        JPanel innerStackP = new JPanel();
        innerStackP.setLayout(new GridLayout(0, 1, 3, 3));
        innerStackP.add(symbolTF);
        innerStackP.add(suspendB);
        innerStackP.add(resumeB);

        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.add(innerStackP);
    }

    private void suspendNow() {
        if (runThread != null) { // avoid NullPointerException
            runThread.suspend();
        }
    }

    private void resumeNow() {
        if (runThread != null) { // avoid NullPointerException
            runThread.resume();
        }
    }

    public void run() {
        try {
            // Store this for the suspendNow() and
            // resumeNow() methods to use.
            runThread = Thread.currentThread();
            int count = 0;

            while (true) {
                // each time through, show the next symbol
                symbolTF.setText(symbolList[count % symbolList.length]);
                Thread.sleep(200);
                count++;
            }
        } catch (InterruptedException x) {
            // ignore
        } finally {
            // make sure that the reference to it is also lost.
            runThread = null;
        }
    }

    public static void main(String[] args) {
        SwingSuspendResume vsr = new SwingSuspendResume();
        Thread t = new Thread(vsr);
        t.start();

        JFrame f = new JFrame();
        f.setContentPane(vsr);
        f.setSize(320, 200);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}