You are on page 1of 11

Multi-threading in Swing

See also:

22 Mar 2010 CMPT166 Dr. Sean Ho Trinity Western University

Swing tutorial Fli er e!a" le

Outline for today


SwingWor#er $lass %or t&rea's in Swing Sen'ing an' re$eiving results:
'o(n)a$#groun'*+

an' 'one*+

Pu,lis&ing

rogress u 'ates - interi" results:

u,lis&*+ an' ro$ess*+ an' isCan$elle'*+

Can$elling a ,a$#groun' tas#


$an$el*+

CMPT166: threads in Swing

22 Mar 2010

Threads in Swing
Swing

rogra"s &ave "ulti le t&rea's: t&rea' *"ain*+ setu ,e%ore .U(+ 'is at$& t&rea' *intera$ts w-.U(+ wor#er t&rea's you $reate

(nit

/vent 0ny

1nly t&e event 'is at$& t&rea' s&oul' a$$ess

t&e .U( *$&ange wi'get te!t2 et$.+


Wor#er

t&rea's &ave to as# t&e event 'is at$& t&rea' to u 'ate t&e .U(

How 'o wor#er t&rea's $o""uni$ate to t&e

event 'is at$& t&rea'3


CMPT166: threads in Swing 22 Mar 2010 3

Swing

or!er a"stra#t #lass

Su,$lass o% T&rea' t&at allows you to: De%ine t&e tas# to ,e 'one in ,a$#groun' 4un $o'e on t&e event 'is at$& t&rea'

w&en t&e wor#er t&rea' is 'one to t&e event 'is at$& t&rea'

4eturn an o,5e$t %ro" t&e wor#er t&rea' Sen'

rogress u 'ates %ro" t&e wor#er t&rea' to t&e event 'is at$& t&rea' ro erties: w&en t&e wor#er t&rea' $&anges t&e"2 events get sent to t&e event 'is at$& t&rea'
CMPT166: threads in Swing 22 Mar 2010 4

De%ine ,oun'

%sing Swing

or!er
or!er (

SwingWor#er is a,stra$t: so su,$lass it


#lass &et#her e'tends Swing

SwingWor#er is te" late': s e$i%y t&e

ty e-$lass o% o,5e$t returne' ,y t&e ,g tas#:

#lass &et#her e'tends Swing

or!er)*+age, -oid.

1verri'e 'o(n)a$#groun'*+ to 'e%ine t&e tas#:

/u"li# *+age do*n0a#!ground12 ( 3 4


4eturn S&oul' 4eturn

ty e is sa"e as in te" late only "o'i%y lo$al varia,les result o% t&e long6running tas#
22 Mar 2010 $

CMPT166: threads in Swing

5etting the result: done12


1verri'e t&e 'one*+ "et&o' to 'e%ine &ow t&e

event 'is at$& t&rea' gets t&e results:

/u"li# 6oid done12 ( try ( +y0utton7set*#on1 get12 28 4 e'#e/t 1*nterru/ted9'#e/tion e2 ( 4 e'#e/t 19'e#ution9'#e/tion e2 ( 4

T&is "et&o' is run on t&e event 'is at$& t&rea' 7ot $alle' until t&e wor#er t&rea' &as %inis&e'
get*+

,lo$#s until wor#er is %inis&e'

Co ies %ro" return value o% 'o(n)a$#groun'*+


CMPT166: threads in Swing 22 Mar 2010 6

Starting the wor!er thread


To get t&e wor#er t&rea' running:

Create an instan$e o% your su,$lass o% SwingWor#er an' $all its .e!e$ute*+ "et&o'

&et#her fet#her ; new &et#her128 fet#her7e'e#ute128


Di%%erent

%ro" usual T&rea'.start*+

T&is $oul' ,e 'one in t&e a$tion listener %or a

,utton2 %or instan$e

CMPT166: threads in Swing

22 Mar 2010

9'a+/le with Swing

or!er
e6ent listener for "utton

1new Swing or!er)*+age*#on, -oid.12 ( /u"li# *+age*#on do*n0a#!ground12 ( *+age*#on i+g ; 1*+age*#on2 ser6er*n7getO">e#t128 anony+ous #lass return i+g8 slow tas! 4 /u"li# 6oid done12 ( get o"> returned "y try ( do*n0a#!ground12 +y0utton7set*#on1 get12 28 run "y 4 e'#e/t 1*nterru/ted9'#e/tion e2 ( e6ent dis/7 4 e'#e/t 19'e#ution9'#e/tion e2 ( thread 4 4 start the thread 427e'e#ute128 4
CMPT166: threads in Swing 22 Mar 2010 <

/u"li# 6oid a#tionPerfor+ed1=#tion96ent e6t2 (

Pu"lishing /rogress u/dates


T&e wor#er t&rea' "ay sen' o,5e$ts to t&e

event 'is at$& t&rea' as interi" results:

De$lare ty e o% interi" result in te" late:


3 e'tends Swing or!er)*+age, &loat. (

Fro" 'o(n)a$#groun'*+2 $all

u,lis&*+:

/u"lish1 "ytes&et#hed @ tot0ytes 28

1verri'e

ro$ess*+ to s e$i%y &ow event 'is at$& t&rea' &an'les an u 'ate:


/u"li# 6oid /ro#ess1 Aist)&loat. u/dates 2 (
.iven

a 8ist o% a$$u"ulate' u 'ates


22 Mar 2010 ?

u,lis&*+ "ay ,e $alle' very very %re9uently:


CMPT166: threads in Swing

Su++ary of Swing
1new Swing

or!er

or!er)*+age*#on, &loat.12 ( /u"li# *+age*#on do*n0a#!ground12 ( @@ long tas! @@ /eriodi#ally #all /u"lish12 with an u/date @@ return an *+age*#on 4 /u"li# 6oid /ro#ess1 Aist)&loat. u/dates 2 ( @@ u/date /rogress "ar %*, et#7 4 /u"li# 6oid done12 ( try ( @@ get12 *+age*#on result, then set*#on12, et#7 4 e'#e/t 1*nterru/t9'#e/tion e2 ( 3 4 4 427e'e#ute128

CMPT166: threads in Swing

22 Mar 2010

10

Can#elling a "a#!ground tas!


Call t&e .$an$el*+ "et&o' o% t&e wor#er t&rea'
Means

t&rea' $an;t ,e an anon. o,5e$t

(n t&e wor#er t&rea' *'o(n)a$#groun'*++2 1r $an$el using interru ts:


Call

$&e$# i% we;ve ,een $an$elle': i% *isCan$elle'*++ $an$el*true+ instea' o% 5ust $an$el*+ t&rea' re$eives (nterru t/!$e tion

Wor#er 1nly

i% wor#er t&rea' is 'oing so"et&ing t&at $an raise (nterru t/!$e tion: T&rea'.slee *+2 networ# sen'-re$eive2 <
CMPT166: threads in Swing 22 Mar 2010 11

You might also like