Esempio di thread per la 5E

Puntini
JDot

package puntini;

import java.awt.Color;

import javax.swing.JLabel;

public class JDot extends JLabel implements Runnable {
	
	private String s = "Attendere";
	private boolean running = false;
	
	public JDot() {
		this.setText(s);
		this.setOpaque(true);
		this.setBackground(Color.YELLOW);
	}

	public void start() {
		if (!running) {
			running = true;
			Thread t = new Thread(this);
			t.setDaemon(true);
			t.start();
		}
	}
	
	public void stop() {
		running = false;
	}
	
	@Override
	public void run() {
		while (running) {
			s += '.';
			this.setText(s);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
		}
	}

}

Main

package puntini;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.SpringLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Main extends JFrame {
	private JDot jDot;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main frame = new Main();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Main() {
		setTitle("Puntini");
		setBounds(100, 100, 450, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		SpringLayout springLayout = new SpringLayout();
		getContentPane().setLayout(springLayout);
		
		jDot = new JDot();
		springLayout.putConstraint(SpringLayout.NORTH, jDot, 10, SpringLayout.NORTH, getContentPane());
		springLayout.putConstraint(SpringLayout.WEST, jDot, 10, SpringLayout.WEST, getContentPane());
		getContentPane().add(jDot);
		
		JButton btnAvvia = new JButton("Avvia");
		btnAvvia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				jDot.start();
			}
		});
		springLayout.putConstraint(SpringLayout.NORTH, btnAvvia, 6, SpringLayout.SOUTH, jDot);
		springLayout.putConstraint(SpringLayout.WEST, btnAvvia, 0, SpringLayout.WEST, jDot);
		getContentPane().add(btnAvvia);
		
		JButton btnFerma = new JButton("Ferma");
		btnFerma.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jDot.stop();
			}
		});
		springLayout.putConstraint(SpringLayout.NORTH, btnFerma, 0, SpringLayout.NORTH, btnAvvia);
		springLayout.putConstraint(SpringLayout.WEST, btnFerma, 6, SpringLayout.EAST, btnAvvia);
		getContentPane().add(btnFerma);
	}
}