public class MainApp {
    boolean packFrame = false;    /**
     * Construct and show the application.
     */
    public MainApp() {
        MainFrame frame = new MainFrame();        //frame.setVisible(true);
        // Validate frames that have preset sizes
        // Pack frames that have useful preferred size info, e.g. from their layout
       if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }        // Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2 ,
                          (screenSize.height - frameSize.height) / 2);        frame.setVisible(true);
    }    /**
     * Application entry point.
     *
     * @param args String[]
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    //SysUtil.SysInit();
                    System.out.println("我是你爷爷");
                    UIManager.setLookAndFeel(UIManager.
                                             getSystemLookAndFeelClassName());
                } catch (Exception exception) {
                    exception.printStackTrace();
                }                 new MainApp();
            }
        });
    }
}这段代码中
      if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }        // Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2 ,
                          (screenSize.height - frameSize.height) / 2);1、这段比较窗体初始化的代码在什么情况下使用,觉得没有也可以啊,我是菜鸟,请大侠指点?2、在这段代码中
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    //SysUtil.SysInit();
                    System.out.println("我是你爷爷");
                    UIManager.setLookAndFeel(UIManager.
                                             getSystemLookAndFeelClassName());
                } catch (Exception exception) {
                    exception.printStackTrace();
                }                 new MainApp();
            }
        });为什么要要用这样一个匿名线程,来实现窗体的的调用??
以上问题比较菜,请大家指点!!

解决方案 »

  1.   

    SwingUtilities.invokeLater实现了异步调用 相当于一个人在跑步 然后把棒子交给另一个人
    让他去跑完后面的路程 然后自己去做别的事情
    和他相对的是SwingUtilities.invokeAndWait 这相当把棒子交给另一个人 让他去跑后面的路
    但是还是会等待他跑回来 再去做自己的事情
      作用就是异步 想当于搞了个新线程去做另外件事情
      

  2.   

    其实区别真的不是很大,现在Netbeans自动生成代码就是这样的,呵!像eclipse,jbuilder是直接new一个对象,没什么区别。不过如果是jdialog,就有用些,有时你并不想让整个单个线程一口气跑完,需要传递某些值什么的就好用了
      

  3.   

    如果单独就是这个程序应该是没什么用处的。但是如果程序很大的情况下,有多个任务或是线程在运行的情况,可以防止block线程、死锁之类的问题。
      

  4.   

    1、// Center the window,注释里都写好了,还有解决了窗口过大后你没法操作的问题,让你的窗口顶多与屏幕一样大,也就是最大化的时候。这个问题很有必要,我在linux下面打开忘了是netbeans还是eclipse时,窗体就是大于了屏幕,没法进行鼠标操作。
    2、我也支持这个:如果单独就是这个程序应该是没什么用处的。但是如果程序很大的情况下,有多个任务或是线程在运行的情况,可以防止block线程、死锁之类的问题。
      

  5.   

    eclipse,jbuilder是直接new一个对象的.........