為什麼要加EventQueue.invokeLater

1013497067發表於2018-04-17
比如下面的程式:
import java.awt.*;
import javax.swing.*;
 
public class Test 
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    JFrame frame = new JFrame();
                    frame.setSize(400, 300);
                    frame.setVisible(true);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
            });
    }
}


原因:
Java's GUI is strictly single-threaded.
All GUI related things in java should always go through a single thread. The thread is our legendary "AWT-EventQueue-0"   . Hence all GUI related actions should necessarily go through the AWT Event thread. If not so you may end up in a deadlock. For small programs, this might never happen. But for a huge java application if you try frame.setVisible(true) kind of thing in main thread, you will soon find yourself searching a new job. What invokeLater() does is to post your Runnable in the AWT thread's event queue. So the code in your run method will be executed in the AWT-Eventqueue thread.
大意是說,java的GUI都是的單執行緒,應該使用事件排程執行緒去執行,如果沒意思使用事件排程執行緒的話,可能造成死鎖。但是在小的程式中,這種現象(死鎖)不會發生的;大的應用程式中才會出現這種現象!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18903360/viewspace-2153030/,如需轉載,請註明出處,否則將追究法律責任。

相關文章