2011-09-14 16 views
5

मेरे कोड है:JFrame भरी हुई है देर से

solveDb_userfileInconsistency solve = new solveDb_userfileInconsistency(); 
    solve.setVisible(true); 

    try { 
     solve.solveIt(); 
    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

"solveIt" विधि रिटर्न 30 सेकंड के बाद और जब तक यह देता है, फ्रेम ठीक से स्थापित नहीं है, लेकिन solveIt विधि रिटर्न के बाद, फ्रेम ठीक से स्थापित हो जाता है लेकिन क्या मैं चाहता हूं कि हल करने से पहले यह विधि, फ्रेम स्क्रीन पर ठीक से होना चाहिए। क्या कोई तरीका है जो फ्रेम की स्थापना का इंतजार कर सकता है और उसके बाद उस विधि को हल करता है?

उत्तर

2

ऐसा लगता है कि आप शायद यूआई थ्रेड पर यह सब कर रहे हैं। ऐसा न करें - solveIt को पृष्ठभूमि थ्रेड पर निष्पादित करें, यूआई थ्रेड में SwingUtilities का उपयोग करके कॉल करें यदि उसे UI को अपडेट/क्वेरी करने की आवश्यकता है। असल में, आपको यूआई थ्रेड में महत्वपूर्ण काम नहीं करना चाहिए - अधिक जानकारी के लिए Swing concurrency tutorial देखें।

1

स्विंगवर्कर कक्षा पर एक नज़र डालें। यह फ्रेम को स्थापित करने के बिना पृष्ठभूमि प्रक्रियाओं को करने के लिए प्रयोग किया जाता है।

1

अल्पकालिक जीयूआई संबंधित कोड के लिए ईवेंट-प्रेषण धागे का उपयोग करें। अन्य उत्तरों में प्रस्तावित लंबे समय तक चलने वाले कार्यों को अपने स्वयं के धागे में निष्पादित किया जाना चाहिए।

चूंकि लोग मुझे इसके साथ शर्त लगाते हैं। मुझे सिर्फ कुछ दिलचस्प लिंक के साथ उनके जवाब के पूरक हैं:

ध्यान दें कि JFC के दो लिंक अंक के लिए कुछ हद तक पुराने लेकिन प्रासंगिक दस्तावेज। आजकल SwingWorker मानक API में शामिल किया गया है।

चीयर्स,

संबंधित मुद्दे