
Š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);
}
}
