// Example of using threads in Java; also how to use JTextArea import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class threadapp extends JApplet implements ActionListener { private MyThread thread1, thread2; JButton susp1, susp2, res1, res2, start1, start2; static public JTextArea txt; public void init () { thread1 = new MyThread(1000, 6000); thread2 = new MyThread(5000, 5000); susp1 = new JButton("Suspend 1"); susp2 = new JButton("Suspend 2"); res1 = new JButton("Resume 1"); res2 = new JButton("Resume 2"); start1 = new JButton("Start 1"); start2 = new JButton("Start 2"); txt = new JTextArea(5, 20); txt.setLineWrap(true); txt.setEditable(false); JScrollPane sp = new JScrollPane(txt); sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); Container c = getContentPane(); c.setLayout(new FlowLayout(FlowLayout.CENTER)); c.add(sp); Panel p = new Panel(); p.setLayout(new GridLayout(3,2)); p.add(start1); p.add(start2); p.add(susp1); p.add(susp2); p.add(res1); p.add(res2); c.add(p); susp1.setEnabled(false); susp2.setEnabled(false); res1.setEnabled(false); res2.setEnabled(false); start1.addActionListener(this); start2.addActionListener(this); res1.addActionListener(this); res2.addActionListener(this); susp1.addActionListener(this); susp2.addActionListener(this); } public void actionPerformed (ActionEvent e) { if (e.getSource() == susp1) { thread1.suspend(); susp1.setEnabled(false); res1.setEnabled(true); } else if (e.getSource() == susp2) { thread2.suspend(); susp2.setEnabled(false); res2.setEnabled(true); } else if (e.getSource() == res1) { thread1.resume(); res1.setEnabled(false); susp1.setEnabled(true); } else if (e.getSource() == res2) { thread2.resume(); res2.setEnabled(false); susp2.setEnabled(true); } else if (e.getSource() == start1) { thread1.start(); start1.setEnabled(false); susp1.setEnabled(true); } else if (e.getSource() == start2) { thread2.start(); start2.setEnabled(false); susp2.setEnabled(true); } } }; class MyThread extends Thread { private int seed; private int wait_interval; public MyThread (int val, int interval) { seed = val; wait_interval = interval;} public void run () { try { while (true) { Thread.sleep (wait_interval); threadapp.txt.append("\n" + getName() + ":" + seed); seed = seed + 10; } } catch (InterruptedException exc) { } } };