控制台程序。
准备好应用程序窗口及其包含的组件并显示,这称为实现窗口。调用应用程序窗口对象的setVisible()方法就会实现窗口。实现了应用程序的GUI之后,在主线程中修改或查询GUI可能会导致死锁。Swing组件的方法都不是线程安全的,所以它们必须在不是主线程的其它线程中执行。
创建GUI并处理与GUI交互的线程成为Swing事件分派线程。
1 import javax.swing.JFrame; 2 import javax.swing.UIManager; 3 import javax.swing.SwingUtilities; 4 5 public class TryWindow { 6 public static void createWindow(){ 7 JFrame aWindow = new JFrame("This is the Window Title"); 8 int windowWidth = 400; // Window width in pixels 9 int windowHeight = 150; // Window height in pixels 10 aWindow.setBounds(50, 100, // Set position 11 windowWidth, windowHeight); // and size 12 aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 13 aWindow.setVisible(true); // Display the window 14 } 15 16 public static void main(String[] args) { 17 18 /* // List look-and-feel class names 19 UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels(); 20 for(UIManager.LookAndFeelInfo look : looks) { 21 System.out.println(look.getClassName()); 22 } */ 23 24 SwingUtilities.invokeLater(new Runnable() { 25 public void run() { 26 createWindow(); 27 } 28 }); 29 } 30 }
createWindow()方法由匿名Runnable类对象中的run()方法调用,Runnable类对象在main()方法中创建。javax.swing包中定义的swingUtilities类包含多个静态实用方法,包括这里调用的invokeLater()方法。这个方法在事件分派线程中执行作为参数传送的Runnable对象的run()方法,如果要避免处理用户与应用程序窗口进行交互时出现的问题,这就是应采用的方式。