Re: repaint doesn't work
To: comp.lang.java.gui
Marco wrote:
post an SSCCE* and I
might reconsider.
This is the code. Output must be "writed Wait", then "writed Done", and
I must see "Wait", and then "Done" on Frame. But I see only "Done" and
"writed Done" at end.
private void work(write w)
{
long stop=(new java.util.Date()).getTime()+max*1000;
while (((new java.util.Date()).getTime()<stop)&&(!w.done)) {}
//wait for paint finished, max 10 sec.
//never exit from loop because of w.done==true!!!!!!
//here I execute method_that_processes_data_employing_some_seconds();
}
The work threads will take some time, okay, we get the point.
public window()
{
super();
setSize(100,100);
setLocation(200,200);
Button b=new Button("Push");
done a=new done();
b.addActionListener(a);
add("Center",b);
addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
}
);
setVisible(true);
}
//inner class
Just to point out, inner classes are common enough that commenting them
is like commenting a method or field. // field.
class done implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
removeAll();
write wait=new write(100,100,"Wait");
add("Center",wait);
wait.repaint();
validate();
repaint();
Ah, here we go. What part of "When you call 'work()', call it from a
new Thread(). " didn't you understand?
// work(wait);
new Thread() {
public void run() {
work(wait);
EventDispatcher.invokeLater(new Runnable() {
public void run() {
removeAll();
write done=new write(100,100,"Done");
add("Center",done);
validate();
repaint();
}
}
}.start();
}
}
}
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24