posted on: 2011-06-15 21:51:29
This describes the very basics of starting a thread so that we do not execute long running tasks on the edt.

>PREVIOUS NEXT

I will us a contrived example to illustrate locking up the edt, then I will show how that example can be used off of the edt.

Disclaimer: I am going to do some ugly things, in the next version I will try to have removed most of this ugliness.

Lets just look at the action listener for now.

new ActionListener(){
    public void actionPerformed(ActionEvent event){
        label.setText(Thread.currentThread().getName());
    }
}

I am going to change this to:

public void actionPerformed(ActionEvent event){
    label.setText(Thread.currentThread().getName());
    try{
                   
        Thread.sleep(500);
                    
    } catch(InterruptedException e){
        //not to worry.
    }
}

If you run this, when you click the button the program locks up for half a second and then it updates the label. So what we want to do is to get off of the EDT. To do that we just create a Runnable and start it in a new Thread.

public void actionPerformed(ActionEvent event){
    Runnable r = new Runnable(){
        public void run(){
            label.setText(Thread.currentThread().getName());
            try{

                Thread.sleep(500);

             } catch(InterruptedException e){
                 //not to worry.
             }
         }
     };
     new Thread(r).start();
  }
}

Now when you click it there is no waiting, but the name changes because we are starting a new thread. This is not nescessarily a problem, but it is also not a good thing.

At this juncture we know why our gui locks up when we execute a long running task on the EDT and we know a way to avoid this lock up. Now we are going to look at refining these techniques remember one of the goals of this tutorial is to make the application essentially a single threaded application. Right now, it is using as many threads as we can click.

PREVIOUS NEXT

Comments

Name: