CIS 260 Using threadsNow that we have seen the problem and been told that the solution (well... a solution) is threads, the question becomes: How do we use threads to make our user interface more responsive? The next example shows one approach. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TThread3 extends JFrame { Counter ctr = null; JButton btnStart, btnStop; JLabel lblNum; int count = 0; boolean running = false; private class Counter extends Thread { public void run() { while (count++ < 10000) { if (!running) break; lblNum.setText(Integer.toString(count)); try { sleep(100); } catch (InterruptedException e) { System.out.println("Application Interrupted"); } } } } public static void main(String[] args) { TThread3 app = new TThread3(); app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); app.init(); app.pack(); app.setVisible(true); } public void init() { Container c = this.getContentPane(); c.setLayout(new GridLayout(3,1)); lblNum = new JLabel("Running Total"); btnStart = new JButton("Start"); btnStop = new JButton("Stop"); btnStop.setEnabled(false); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnStart.setEnabled(false); btnStop.setEnabled(true); running = true; ctr = new Counter(); ctr.start(); } }); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (ctr != null) { running = false; btnStart.setEnabled(true); btnStop.setEnabled(false); } } }); c.add(lblNum); c.add(btnStart); c.add(btnStop); } } |