मेरे पास एक प्रोग्राम है, जो लोड करने में लंबा समय लगता है। इस वजह से, मैं एक स्पलैश स्क्रीन विकसित करना चाहता था जो लोड होने वाले उपयोगकर्ता को फीडबैक प्रदान कर सके। एक छवि, लेबल और जेपी प्रोग्रेसबार के साथ एक साधारण जेफ्रेम।कस्टम जावा स्प्लैश स्क्रीन "फ्रीज" जब तक पूरे एप्लिकेशन को लोड नहीं किया गया है
मैं प्रयोग किया गया है और सबसे अच्छा परिणाम रहा था मेरी main()
में यह कर रहे हैं:
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new SplashScreen();
}
});
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
//Code to start system
new MainFrame();
//.. etc
}
});
दोनों SplashScreen और मेनफ्रेम
JFrame का विस्तार वर्ग हैं। मैं पुस्तकालय के रूप में सबस्टेंस का भी उपयोग कर रहा हूं।
स्पलैशस्क्रीन का कन्स्ट्रक्टर खुद को जेएलएबल और जेपी प्रोग्रेसबार जोड़ता है, पैक करता है और दृश्यमान सेट करता है। जेपी प्रोग्रेसबार setIndeterminate(true)
है;
जब मैं अपना प्रोग्राम चलाता हूं, तो मेरी स्पलैशस्क्रीन प्रदर्शित होती है लेकिन प्रोग्रेसबार लॉक हो जाता है, यह तब तक नहीं चलता है जब तक कि शेष कार्यक्रम शुरू नहीं हो जाता है, यह अपेक्षा के अनुसार आगे बढ़ना शुरू कर देता है।
मुझे यहां क्या याद आ रही है? मैंने जो खोज किया है, वह इस समस्या का उल्लेख नहीं करता है और अधिकांश "कस्टम स्पलैश स्क्रीन" कार्यान्वयन मेरे बारे में एक बहुत ही समान तरीके से जाते हैं।
प्रतिक्रिया के लिए धन्यवाद, नगण्य मैं इस काम के लिए है, लेकिन केवल मादक द्रव्यों का उपयोग किए बिना का एक सा के बाद। करते हैं, अपने कोड का उपयोग, मेरे पास है: SwingUtilities.invokeLater (नई Runnable() { सार्वजनिक शून्य रन() { कोशिश { UIManager.setLookAndFeel (नई SubstanceSaharaLookAndFeel()); } पकड़ (UnsupportedLookAndFeelException पूर्व) { \t लॉगर.getLogger (Main.class.getName()) लॉग (स्तर .SEVERE, शून्य, पूर्व); } } }); मुझे त्रुटि मिलती है "इवेंट डिस्पैच थ्रेड पर घटक निर्माण किया जाना चाहिए" –
पदार्थ घटक निर्माण थ्रेडिंग नियमों को लागू करता है - आपको स्विंग ईडीटी पर सभी जीयूआई घटक बनाना होगा। मेरा जवाब देखें –