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