What does this java .execute() method call mean?

applet, java, multithreading

Solution

`execute` is a method of `SwingWorker`. What you're seeing there is an anonymous class being instantiated and having its `execute` method called immediately.

I have to admit I'm a bit surprised that code compiles, though, because it seems to be assigning the result of `execute` to the `worker` variable, and the documentation tells us that `execute` is a `void` function.

If we deconstruct that code a bit, it can be clearer. First, we create an anonymous class extending `SwingWorker` and create an instance of it, all at the same time (this is the big bit in parentheses):

SwingWorker tmp = new SwingWorker<ImageIcon[], Object>() {
    public ImageIcon[] doInBackground() {
            final ImageIcon[] innerImgs = new ImageIcon[nimgs];
        ...//Load all the images...
        return imgs;
    }
    public void done() {
        //Remove the "Loading images" label.
        animator.removeAll();
        loopslot = -1;
        try {
            imgs = get();
        } ...//Handle possible exceptions
    }

};

Then we call `execute` and assign the result to `worker` (which is the bit that, it seems to me, shouldn't compile):

SwingWorker worker = tmp.execute();

Update: And indeed, I tried it and it doesn't compile. So not great example code. This would compile:

SwingWorker worker = new SwingWorker<ImageIcon[], Object>() {
    public ImageIcon[] doInBackground() {
            final ImageIcon[] innerImgs = new ImageIcon[nimgs];
        ...//Load all the images...
        return imgs;
    }
    public void done() {
        //Remove the "Loading images" label.
        animator.removeAll();
        loopslot = -1;
        try {
            imgs = get();
        } ...//Handle possible exceptions
    }

};
worker.execute();

Problem

I was doing some reading through the sun java tutorials, and I came across this page here: How to Make an Applet Under the heading, "Threads in Applets" I found this piece of code: ``` //Background task for loading images. SwingWorker worker = (new SwingWorker<ImageIcon[], Object>() { public ImageIcon[] doInBackground() { final ImageIcon[] innerImgs = new ImageIcon[nimgs]; ...//Load all the images... return imgs; } public void done() { //Remove the "Loading images" label. animator.removeAll(); loopslot = -1; try { imgs = get(); } ...//Handle possible exceptions } }).execute(); } ``` First up I'm newish, so I'm sorry if this is a stupid question. However I've never heard of that ".excecute()". I don't understand it, and I'm unable to find anything about it from google. I see this here is... an anonymous inner class? (Please correct me) and it is starting a thread to load in images. I thought that the run() method is invoked with a call to start()? Please help me clear this confusion.

Original source