![]() |
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); } }