2.3. Aplikace vláken

src/
Příklad 2.3. Čítač s grafickým rozhraním

Vytvořme čítač, jenž lze opakovaně zastavovat a spouštět. Čítač bude reprezentován instancí třídy Thread, která dostane k dispozici odkaz na textové pole, do kterého bude čítač zapisovat svou aktuální hodnotu. Voláním metody invertFlag se bude stav čítače měnit ze spuštěného na pozastavený a naopak.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class CounterThread extends Thread
{
	private int count = 0;
	private boolean runFlag = false;
	private JTextField txt;

	public CounterThread(JTextField txt)
	{
		this.txt = txt;
	}

	public void invertFlag()
	{
		runFlag = !runFlag;
	}
		
	public void run()
	{
		while( true ) {
			try {
				sleep(100);
			} catch( InterruptedException e) {}
			if( runFlag )
				txt.setText(Integer.toString(count++));
		}
	}
}

public class Counter extends JFrame {

	JTextField txt = new JTextField(10);
	CounterThread cntr = new CounterThread(txt);

	Counter()
	{
		JPanel p = new JPanel();
		p.add(txt);

		JButton bStop  = new JButton("Start/Stop");
		bStop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cntr.invertFlag();								
			}
		});
		p.add(bStop);
		getContentPane().add(p, BorderLayout.CENTER);
		setSize(300,80);
	}
		
	public static void main(String[] args) {
		Counter app = new Counter();
		app.setVisible(true);		
		
		app.cntr.start();
	}
}