Back Up Next

Še en primer

velikokrat lahko niti uporabimo za povečanje odzivnosti programov;
primer kaže, kako lahko neko komponento z nitjo, ki teče v ozadju, spreminjamo, še vedno pa ohranimo odzivnost uporabniškega vmesnika;
primer je zanimiv tudi, ker preveden program lahko poženemo kot aplet ali pa kot aplikacijo;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
//***********************************************************
public class Counter2 extends Applet {  // razred je izpeljan iz razreda Applet
  //*********************************************
  private class SeparateSubTask extends Thread { // nit
    int count = 0;
    boolean runFlag = true;
    SeparateSubTask() { start(); }
   //--------------------------------------------------
    public void run() {
        while (true) {
              try {
                 sleep(100);
              } catch (InterruptedException e){ }
              if(runFlag)  l.setText(Integer.toString(count++));
        }
    }
  }
//***********************************************
  private SeparateSubTask sp = null;
  private Label l=new Label("label");
  private Button 
      onOff = new Button("Toggle"),
      start =  new Button("Start");
//*****************************************
  public void init() {
    start.addActionListener(new StartL());
    add(start);
    onOff.addActionListener(new OnOffL());
    add(onOff);
    add(l);
  }
//*********************************************
  class StartL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if(sp == null)
        sp = new SeparateSubTask();
    }
  }
//*********************************************
  class OnOffL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if(sp != null)
        sp.runFlag = !sp.runFlag; // invertFlag();
    }
  }
//*********************************************
  public static void main(String[ ] args) { // main se kliče le, če program poženemo kot aplikacijo
     Counter2 applet = new Counter2();      // v njem ustvarimo okno in pokličemo začetne metode apleta
     Frame aFrame = new Frame("Counter2");
     aFrame.addWindowListener( new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      } );
    aFrame.add(applet, BorderLayout.CENTER);
    aFrame.setSize(300,200);
    applet.init();
    applet.start();
    aFrame.setVisible(true);
  }
}
Back Up Next