2011-04-25 4 views
7

जिस पुस्तक को मैं पढ़ रहा हूं, मल्टीथ्रेडिंग के साथ जीयूआई के हर उदाहरण में ऐसा कुछ है:जावा EventQueue। सब कुछ invokelater विधि में क्यों होना चाहिए?

public static void main(String[] args) throws Exception 
{ 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      JFrame frame = new SomeKindOfFrame(); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    }); 
} 

(मेरा मतलब EventQueue है)। लेकिन मुख्य रूप से मुख्य (ईडीटी) धागे में कोड निष्पादित नहीं किया गया है?

उत्तर

6

डेस्कटॉप जीयूआई अनुप्रयोग आमतौर पर इस तरह से काम करते हैं। गुई के लिए एक धागा और शेष आवेदन के लिए एक या कई धागे हैं। EventQueue का उपयोग करके आप निर्दिष्ट करते हैं कि जीयूआई थ्रेड को अन्य धागे से क्या करना चाहिए। अच्छे लिंक के लिए

+0

स्पष्ट रूप से स्विंग में इसे "सिंगल थ्रेड नियम" कहा जाता है। स्विंग इवेंट इवेंट थ्रेड से प्राप्त किए जाते हैं जो इन छोटे 'रननेबल()' उदाहरण लेते हैं और उन्हें चलाते हैं। –

+0

@ वॉरेन पी, पूरी तरह से सहमत हैं। मैंने बस इसे सबसे आसान तरीके से समझाने की कोशिश की। बीटीडब्ल्यू, व्याकरण सुधार के लिए धन्यवाद। –

13

मुख्य धागा ईडीटी के समान नहीं है। यदि आप System.out.println(Thread.currentThread().getName() जोड़ते हैं तो आपको की विधि run() विधि के भीतर main() और AWT-EventQueue-0 के भीतर main प्रिंट करें।

यहाँ a discussion of the history of the single threaded rule in Swing बातें स्पष्ट कर मदद कर सकता है कि है।

+1

+1। –