multithreading - Problem with delay setText label java -
i have big problem java program. try implement simple software. there label , wanna stamp text in label must separate 2 sec.
i have seen problem thread , swing , implemented code result not change. can me please thanks
 public void stampchips1(int numberdecrement){          actionlistener taskperformer = new actionlistener() {             public void actionperformed(actionevent evt) {                 jlabel1.settext("l'avversario ha deciso di togliere : . ");             }         };         new javax.swing.timer(2000, taskperformer).start();           actionlistener taskperformer2 = new actionlistener() {             public void actionperformed(actionevent evt) {                 jlabel1.settext("l'avversario ha deciso di togliere : . . ");             }         };         new javax.swing.timer(2000, taskperformer2).start();           actionlistener taskperformer3 = new actionlistener() {             public void actionperformed(actionevent evt) {                 jlabel1.settext("l'avversario ha deciso di togliere : . . .");             }         };         new javax.swing.timer(2000, taskperformer3).start();            jlabel1.settext("l'avversario ha deciso di togliere : " + numberdecrement);     }      
every time call javax.swing.timer.start() in code, continue fire events every 2 seconds (as set in constructors). after few intervals, have 3 different timers trying (and succeeding) set text in same label. text of label depend on timer's actionlistener has last finished executing. if want timer fire once , stop should set this:
javax.swing.timer tmr = new javax.swing.timer(2000, taskperformer); tmr.setrepeats(false); tmr.start();   now each timer fire once only, eliminating overwriting issues on label.
added per request in comments:
when set each timer, set fire once (and camickr stated), set each timer different interval.
the first timer should be:
javax.swing.timer tmr1 = new javax.swing.timer(2000, taskperformer); tmr1.setrepeats(false); tmr1.start();   the second timer should similar:  tmr2 = new ... (4000, taskperformer2);
 third timer should similar:  tmr3 = new ... (6000, taskperformer3);
the problem initial code when stampchips1(int) method executes first sets 3 timers fire events every 2 seconds, , writes label.
time
 0s  - jlabel1 = "l'avversario ha deciso di togliere : " + numberdecrement
 ~2s  - jlabel1 = "l'avversario ha deciso di togliere : . "
 ~2s  - jlabel1 = "l'avversario ha deciso di togliere : . . "
 ~2s  - jlabel1 = "l'avversario ha deciso di togliere : . . ."
 ~4s  - jlabel1 = "l'avversario ha deciso di togliere : . "
 ~4s  - jlabel1 = "l'avversario ha deciso di togliere : . . "
 ~4s  - jlabel1 = "l'avversario ha deciso di togliere : . . ."  
all of timers firing close same time, , won't stop until call timer.stop() or tell fire once timer.setrepeats(false).
Comments
Post a Comment