JDialog दिखाई नहीं दे रहा है

मुझे कस्टम JDialog के साथ कोई समस्या है, जो मुख्य फ्रेम द्वारा अपने स्वयं के धागे में बनाई गई है।

कभी-कभी JDialog अदृश्य है, लेकिन इसके नियंत्रण क्लिक करने योग्य हैं (यदि आप जानते हैं कि उनकी स्थिति कहां है)। समस्या ओरेकल जावा 1.7 पर नहीं होती है, लेकिन निश्चित रूप से ओरेकल जावा 1.6 पर ( 1.6.0_37 और 1.6.0_45 में देखी गई)।

मैं इस तरह के संवाद बनाते हैं:

class MyDialog extends Jdialog() {
 public MyDialog(JFrame frame, boolean modal) {
   super(frame, modal);
   [...]
  }
}

मेरे मेनफ्रेम में:

MyDialog dialog = new MyDialog(myMainFrame,true);
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);

अपेक्षित व्यवहार मेनफ्रेम के MouseEvents जैसी घटनाओं को अवरुद्ध करना और उस पर झूठ बोलना है। यह जावा 1.7 पर पूरी तरह से काम करता है।

तो मेरा सवाल यह है कि, क्या JDialogs बनाते समय इसे ध्यान में रखने के लिए कोई विशेष चीजें हैं, जैसे ही इसे केवल बनाने के लिए, पैरेंटफ्रेम (स्वामी) दिखाई देने के बाद या क्या यह संभवतः जावा जेआरई का ज्ञात बग है? मैंने ओरेकल यहां के बग फिक्स लॉग पर पहले ही जांच की है बिना सफलता के।

2
जोड़ा संपादित
विचारों: 1
आप सही हैं, एक एसएससीसीई बेहतर होगा, लेकिन मेरी समस्या एक बड़ी कोड प्रोजेक्ट में भाग ले रही है, इसलिए दुर्भाग्य से मेरी समस्या का पुनरुत्पादन नहीं होगा। मुझे लगता है कि @ डुरंडल संकेत मुझे सही दिशा में ले जाता है, क्योंकि यह थ्रेडिंग के साथ एक समस्या प्रतीत होता है। यह समझाएगा, यह हमेशा क्यों नहीं होता बल्कि कभी-कभी होता है। जावा 1.6/1.7 अंक एक अलग डिजाइन से संबंधित हो सकता है। आपकी सहायताके लिए धन्यवाद!
जोड़ा लेखक alex, स्रोत
@subash सुझाव के रूप में repaint() या revalidate को कॉल करने का कोई कारण नहीं होना चाहिए। आपकी समस्या अड़चन लगती है जो मुझे स्विंग थ्रेडिंग समस्या की गंध करता है। क्या आप ईडीटी पर सभी स्विंग कॉल करने की देखभाल कर रहे हैं? और ईडीटी के लंबे समय से चलने वाले कोड को कॉल करने के लिए? सबसे अच्छा था अगर आप शॉर्ट कोड पोस्ट कर सकते हैं जो आपकी समस्या को संकलित, चलाता है और पुन: उत्पन्न करता है, तो एक sscce
जोड़ा लेखक Hovercraft Full Of Eels, स्रोत

1 उत्तर

"मुझे एक कस्टम जेडियलॉग के साथ समस्या है, जो मुख्य फ्रेम द्वारा अपने स्वयं के धागे में बनाया गया है

यदि यह सचमुच सच है, तो समस्या है।

आपको ईवेंट डिस्पैच थ्रेड की तुलना में किसी भी अन्य थ्रेड पर स्विंग ऑब्जेक्ट्स, विशेष रूप से JComponent के उदाहरण नहीं बनाना चाहिए। स्विंग पूरी तरह से थ्रेड सुरक्षित नहीं है, जब आप पूरी तरह से सुनिश्चित नहीं हैं कि आप ईडीटी पर हैं तो GUI से संबंधित कोड निष्पादित करने के लिए SwingUtilities.invokeAndWait ()/invokeLater() का उपयोग करें।

2
जोड़ा