I am studying Java Swing and I have some questions related to this simple code tutorial that I am reading:
package com.andrea.execute;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/* An istance of a SimpleExample class is a JFrame object: a top level container */
public class SimpleExample extends JFrame {
/* Create a new SimpleExample object (that is a JFrame object) and set some property */
public SimpleExample() {
setTitle("Simple example");
setSize(300, 200);
setLocationRelativeTo(null); // Center the window on the screen.
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
}
}
The logic is pretty simple: I have a SimpleExample class that inherits from JFrame Swing class. So a SimpleExample will be a toplevel container.
This class contain also the main() method and now I have 2 doubts:
1) Why in the main() method is execute this code:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
It call the invokeLater() method on the SwingUtilities class and pass to it a new Runnable oject.
Reading the documentation I know that is a way to places the application on the Swing Event Queue. It is used to ensure that all UI updates are concurrency-safe.
The thing that I have some problem to understand is how it is implemented.
Inside the input parameter of invokeLater() method it pass this "stuff":
new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
What is it this stuff? What does it represent? and How does it work?