HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 L7 D: c: n' P9 s+ O, ~8 k 
4 H" }. k( a: M$ t+ f" m. w 
 public Object buildActions () { 
  T7 i' F3 |7 ^' {1 g2 D- R    super.buildActions();( c1 n7 v# N# t9 D 
    ! _, T2 \& M8 T5 S% c/ C' H: v1 _! E 
    // Create the list of simulation actions. We put these in 
7 X) n. T' [3 n1 W0 i    // an action group, because we want these actions to be6 d+ D1 G: R7 ?9 ]: B 
    // executed in a specific order, but these steps should 
# k% M6 ?; T! K" r    // take no (simulated) time. The M(foo) means "The message2 m4 _, h: f* e7 s/ X; z) k 
    // called <foo>". You can send a message To a particular9 z* q% w* Q* t/ H7 x 
    // object, or ForEach object in a collection. 
# p3 P: p. V) }% ]) z. I         
" o- j) g7 f0 i    // Note we update the heatspace in two phases: first run% ~) K: }/ v0 l9 a# m; D 
    // diffusion, then run "updateWorld" to actually enact the$ e  m& D1 y# }- d0 E; f# {% | 
    // changes the heatbugs have made. The ordering here is 
; _6 \# }! y- I/ w) a    // significant! 
0 P% i- @3 F0 ^1 `, q        - e  N& a/ B/ _- J. z 
    // Note also, that with the additional& K3 `  [. j( i1 N7 F! e/ t+ W 
    // `randomizeHeatbugUpdateOrder' Boolean flag we can8 g* o, f0 {! x0 E) f/ s' l# H 
    // randomize the order in which the bugs actually run! c$ t  @, H5 E  \ 
    // their step rule.  This has the effect of removing any4 V  `, o9 Z4 R# Z1 K- C 
    // systematic bias in the iteration throught the heatbug& z# _2 x# M/ G- Z* D0 P0 B* ^- Z9 f 
    // list from timestep to timestep 
, c5 g3 h% J$ G1 ]# j7 F7 Y0 f         
3 u8 i; K/ b0 ^; `5 u/ _    // By default, all `createActionForEach' modelActions have 
$ v9 w- ~4 V$ U1 v    // a default order of `Sequential', which means that the- _0 S; h% k8 ]" D( h 
    // order of iteration through the `heatbugList' will be 
- D/ `- S( V# E2 p' {    // identical (assuming the list order is not changed: h/ q# x% I9 o. P# K  {1 s 
    // indirectly by some other process).4 z, m4 q/ |1 t6 D9 @1 X* a 
     
. h0 _4 A1 ~% F7 o0 g    modelActions = new ActionGroupImpl (getZone ());" t- g* {( S/ }. h- t% `3 W, Q 
  }, _4 l- G% G5 T" b) k 
    try { 
# J# R/ j, Q7 D6 z- c4 b      modelActions.createActionTo$message 
# I3 W* J, y2 U( K! I; ?6 i; J) a        (heat, new Selector (heat.getClass (), "stepRule", false)); 
9 `' d5 r& R4 U% T8 u" ?; l    } catch (Exception e) { 
, w) ]7 U9 G) O3 w9 @! f2 V      System.err.println ("Exception stepRule: " + e.getMessage ()); 
" ]1 Z: O- n) o    } 
2 n  y5 f- i8 ~1 I2 r( I$ a 
- y: q9 W- |0 M; C3 l    try {+ K) K% t1 Z+ P3 f; y  c 
      Heatbug proto = (Heatbug) heatbugList.get (0);. L' L; W6 D9 L7 T* p 
      Selector sel =  
2 f* K3 p' |2 G1 _$ U3 b0 u' A        new Selector (proto.getClass (), "heatbugStep", false);7 I8 N; _2 m0 t0 X# g* j5 K 
      actionForEach = 
* i& S' M3 s$ K5 w8 ~+ F+ V* L5 }        modelActions.createFActionForEachHomogeneous$call 
- c- W; Q7 X# n) e8 T5 F" t1 o        (heatbugList, 
0 m9 k  M/ y/ B) \7 Q         new FCallImpl (this, proto, sel, 
" I' J) I" `/ O# U% Q! O                        new FArgumentsImpl (this, sel)));0 e4 t* s5 R* V. \/ j 
    } catch (Exception e) {% N. S( }; T7 g8 C; q  ?. o 
      e.printStackTrace (System.err);4 Y0 |; g3 _1 |! U9 F 
    }% a/ t% F, Y7 k7 v% ?0 q- X 
     
+ g  w' }1 V$ |1 ?  r7 L( Q" I9 {    syncUpdateOrder ();8 y0 k$ Z/ y! F) v3 S; p6 e) w 
9 }" M. j& s  m 
    try {3 J# p. }: o& T3 x 
      modelActions.createActionTo$message  
, i2 H; }3 d% I1 @- ]: E        (heat, new Selector (heat.getClass (), "updateLattice", false)); 
% _7 S" ]( K% f% K8 }, X    } catch (Exception e) { 
. w' F/ [  L  F% g0 K- {, Z      System.err.println("Exception updateLattice: " + e.getMessage ());2 W; _) Y7 k, X/ A  h+ a4 U 
    }9 w8 u; F$ k! k+ H9 \- y9 X 
         
& ~9 u; X7 G- F& F    // Then we create a schedule that executes the 
- \; Q: L: O  r1 w* c    // modelActions. modelActions is an ActionGroup, by itself it 
" t; L; |; |$ H8 X    // has no notion of time. In order to have it executed in 
- x, D# k6 ~# X, h# z8 A3 L    // time, we create a Schedule that says to use the( I% v, L. K  Y3 K 
    // modelActions ActionGroup at particular times.  This 
8 w6 X( f, k+ Y4 c5 H    // schedule has a repeat interval of 1, it will loop every 
$ n& `: }- R4 b, q    // time step.  The action is executed at time 0 relative to 
* t& M& ^+ y" u$ V+ a" ^4 p; K, R1 A    // the beginning of the loop. 
$ u; w8 _& Y: b0 h1 I& D4 J3 ]# L+ `- C$ h* j 
    // This is a simple schedule, with only one action that is 
! j: {' b3 ^+ t& J* G/ C    // just repeated every time. See jmousetrap for more 
7 k4 k# u- J7 p* r6 h* I    // complicated schedules.. Y0 l5 c6 B3 D1 r$ ] 
   
6 o/ z& T9 l! m4 \1 h    modelSchedule = new ScheduleImpl (getZone (), 1);8 U% t) K5 Q2 E8 x: ~ 
    modelSchedule.at$createAction (0, modelActions);! q7 Q: ^1 T' L6 w0 p; f" @ 
        # a7 b+ y* S0 {9 Q' Y 
    return this; 
0 v5 W  F9 J8 D3 N  } |