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.