Java tutorial
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); } }); } }