import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ThreaderWebStart extends JFrame { private JTextArea ta = new JTextArea(); private JButton b1 = new JButton("Start T1"); private JButton b2 = new JButton("Start T2"); private T1 t1; private T2 t2 = new T2(ta); public static void main(String[] args) { new ThreaderWebStart(); } public ThreaderWebStart() { JScrollPane scrollPane = new JScrollPane(ta); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); b1.addActionListener(new L()); b2.addActionListener(new L()); JPanel p = new JPanel(); p.setLayout(new FlowLayout()); p.add(b1); p.add(b2); getContentPane().add("Center", scrollPane); getContentPane().add("South", p); setSize(300, 200); show(); } class L implements ActionListener { public void actionPerformed(ActionEvent ae) { if(ae.getSource() == b1) { if(b1.getText().equals("Start T1")) { t1 = new T1(ta); t1.startT(); b1.setText("Stop T1"); } else { t1.stopT(); t1 = null; b1.setText("Start T1"); } } else { if(b2.getText().equals("Start T2")) { t2.startT(); b2.setText("Stop T2"); } else { t2.stopT(); b2.setText("Start T2"); } } } } } class T1 extends Thread { private JTextArea ta; private boolean loopIt = false; public T1(JTextArea ta) { this.ta = ta; } public void startT() { loopIt = true; start(); } public void stopT() { loopIt = false; } public void run() { while(loopIt) { ta.append("T1 running\n"); ta.setCaretPosition(ta.getText().length()); try { sleep(1000); } catch(InterruptedException ie) {} } } } class T2 implements Runnable { private JTextArea ta; private Thread t; public T2(JTextArea ta) { this.ta = ta; } public void startT() { t = new Thread(this); t.start(); } public void stopT() { t = null; } public void run() { while(t == Thread.currentThread()) { ta.append("T2 running\n"); ta.setCaretPosition(ta.getText().length()); try { t.sleep(1000); } catch(InterruptedException ie) {} } } }