मैं वर्तमान समय दिखा रहा घड़ी और हर सेकेंड रीफ्रेश करना चाहता हूं। कोड मैं का उपयोग कर रहा है:एक लेबल पर समय प्रदर्शित करने के लिए स्विंगवर्कर और टाइमर का उपयोग करना?
int timeDelay = 1000;
ActionListener time;
time = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
timeLabel.setText(DateTimeUtil.getTime());
/*timeLabel is a JLabel to display time,
getTime() is samll static methos to return formatted String of current time */
}
};
SwingWorker timeWorker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
new Timer(timeDelay, time).start();
return null;
}
};
timeWorker.execute();
क्या मैं EDT के अलावा अन्य एक और धागा में timeLabel
पाठ ताज़ा करने के लिए चाहते हैं।
क्या मैं इसे सही कर रहा हूं? कोई अन्य बेहतर तरीका?
भी जानकारी के लिए, मैं timeLabel
एक extended
JPanel
जो उपयोगिताओं के कुछ समान प्रकार के शामिल करने के लिए जोड़ दिया है, और एक अन्य Main
JFrame
में कहा जाता है।
@ जोनास (1+) से उत्कृष्ट सलाह के अलावा, एक चीज जो आप गलत कर रहे हैं, स्विंग कॉल को पृष्ठभूमि थ्रेड के भीतर से बना रही है। स्विंगवर्कर की 'doInBackground()' विधि में कोई स्विंग कॉल नहीं होना चाहिए जिसे पृष्ठभूमि थ्रेड पर नहीं कहा जा सकता है, जिसका अर्थ है कि आपको निश्चित रूप से इस विधि के अंदर स्विंग टाइमर नहीं बनाना चाहिए, न ही स्विंग टाइमर ऑब्जेक्ट पर 'start() 'को कॉल करना चाहिए । इस सलाह के लिए –
+1। धन्यवाद। एक और बात यह है कि, 'इनइनबैकग्राउंड()' में स्विंग कॉल नहीं हो सकते हैं - क्या इसका मतलब है कि मुझे स्विंग घटकों को 'स्विंगवर्कर' के माध्यम से पैनल, बटन इत्यादि जैसे फ्रेम के अंदर शुरू नहीं करना चाहिए? – Asif
बिल्कुल सही। स्विंगवर्कर गैर-स्विंग प्रारंभिकरण और प्रकाशन, प्रक्रिया, और किए गए तरीकों के माध्यम से स्विंग के साथ संचार के लिए है। –