विंडोज़ में विंडोज़ को फ़ोकस चुराने से रोकने की सुविधा है; इसके बजाय यह टास्कबार आइकन को फ्लैश करता है। XP में यह डिफ़ॉल्ट रूप से चालू है (एकमात्र स्थान जिसे मैंने बदलने के लिए देखा है वह TweakUI का उपयोग कर रहा है, लेकिन कहीं-कहीं रजिस्ट्री सेटिंग है)। विस्टा में उन्होंने डिफ़ॉल्ट को बदल दिया है और / या इसे आउट-ऑफ-द-बॉक्स यूआई के साथ एक उपयोगकर्ता सुलभ सेटिंग के रूप में उजागर कर सकते हैं।
विंडोज़ को खुद को सामने से मजबूर करने और ध्यान केंद्रित करने से रोकना विंडोज 2K (और मैं, एक के लिए, इसके लिए आभारी हूं) के बाद से एक विशेषता है।
उस ने कहा, मेरे पास एक छोटा सा जावा ऐप है जिसे मैं काम करते समय अपनी गतिविधियों को रिकॉर्ड करने के लिए याद दिलाने के लिए उपयोग करता हूं, और यह हर 30 मिनट में खुद को सक्रिय विंडो बनाता है (कॉन्फ़िगर करने योग्य, निश्चित रूप से)। यह हमेशा विंडोज एक्सपी के तहत लगातार काम करता है और टाइटल बार विंडो को कभी भी फ्लैश नहीं करता है। यह निम्नलिखित कोड का उपयोग करता है, जिसे यूआई थ्रेड में टाइमर इवेंट फायरिंग के रूप में कहा जाता है:
if(getState()!=Frame.NORMAL) { setState(Frame.NORMAL); }
toFront();
repaint();
(पहली पंक्ति पुनर्स्थापित करता है अगर छोटा किया जाता है ... वास्तव में यह इसे पुनर्स्थापित करेगा यदि अधिकतम भी हो, लेकिन मेरे पास ऐसा कभी नहीं है)।
जबकि मेरे पास आमतौर पर यह ऐप कम से कम है, अक्सर यह मेरे टेक्स्ट एडिटर के पीछे होता है। और, जैसा मैंने कहा, यह हमेशा काम करता है।
मुझे इस बात का अंदाजा है कि आपकी समस्या क्या हो सकती है - शायद आपके पास सेटविजिबल () कॉल के साथ दौड़ की स्थिति है। जब तक खिड़की वास्तव में प्रदर्शित नहीं होती है, तब तक () मान्य नहीं हो सकता है; मुझे पहले भी requestFocus () के साथ यह समस्या आई है। आपको एक विंडो सक्रिय इवेंट में UI श्रोता में toFront () कॉल लगाने की आवश्यकता हो सकती है।
2014-09-07: कुछ समय में उपरोक्त कोड ने काम करना बंद कर दिया था, शायद जावा 6 या 7 पर। कुछ जांच और प्रयोग के बाद मुझे विंडो की toFront
विधि को ओवरराइड करने के लिए कोड को अपडेट करना पड़ा (इसमें संशोधित कोड के साथ क्या किया गया ऊपर है):
setVisible(true);
toFront();
requestFocus();
repaint();
...
public @Override void toFront() {
int sta = super.getExtendedState() & ~JFrame.ICONIFIED & JFrame.NORMAL;
super.setExtendedState(sta);
super.setAlwaysOnTop(true);
super.toFront();
super.requestFocus();
super.setAlwaysOnTop(false);
}
Java 8_20 के अनुसार, यह कोड ठीक काम कर रहा है।