2012-05-10 10 views
6

का उपयोग करके निर्मित सरल जेडियलॉग को कॉल नहीं कर सकता है। मैं विंडोबिल्डर का उपयोग कर एक कस्टम जेडियलॉग बनाने की कोशिश कर रहा हूं, लेकिन शुरुआत में मुझे कुछ मुद्दों का सामना करना पड़ा। तो यहां वे हैं:जावा ग्रहण विंडोबिल्डर

मैंने विंडोबिल्डर का उपयोग करके सरल jdialog बनाया। यहाँ यह कोड है:

public class GroupFrame extends JDialog { 

    private final JPanel contentPanel = new JPanel(); 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     try { 
      GroupFrame dialog = new GroupFrame(); 
      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
      dialog.setVisible(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Create the dialog. 
    */ 
    public GroupFrame() { 
     setBounds(100, 100, 450, 300); 
     getContentPane().setLayout(new BorderLayout()); 
     contentPanel.setLayout(new FlowLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     getContentPane().add(contentPanel, BorderLayout.CENTER); 
     { 
      JPanel buttonPane = new JPanel(); 
      buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
      getContentPane().add(buttonPane, BorderLayout.SOUTH); 
      { 
       JButton okButton = new JButton("OK"); 
       okButton.setActionCommand("OK"); 
       buttonPane.add(okButton); 
       getRootPane().setDefaultButton(okButton); 
      } 
      { 
       JButton cancelButton = new JButton("Cancel"); 
       cancelButton.setActionCommand("Cancel"); 
       buttonPane.add(cancelButton); 
      } 
     } 
    } 

} 

लेकिन तब मैं सार्वजनिक शून्य शो() की तरह कुछ करने के लिए public static void (String [] args) बदलने के लिए चाहते हैं।

नए शो() विधि कोड है:

public void show() { 
     try { 
      GroupFrame dialog = new GroupFrame(); 
      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
      dialog.setVisible(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

तो जब मैं निम्नलिखित कोड का उपयोग कर इस बदली हुई विधि कॉल करने के triyng हूँ:

GroupFrame groupFrame = new GroupFrame(); 
groupFrame.show(); 

मैं StackOverflowError (मिल गया है क्या संयोग है!; डी):

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError 
    at sun.awt.Win32GraphicsConfig.getBounds(Native Method) 
    at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source) 
    at java.awt.Window.init(Unknown Source) 
    at java.awt.Window.<init>(Unknown Source) 
    at java.awt.Window.<init>(Unknown Source) 
    at java.awt.Dialog.<init>(Unknown Source) 
    at java.awt.Dialog.<init>(Unknown Source) 
    at javax.swing.JDialog.<init>(Unknown Source) 
    at javax.swing.JDialog.<init>(Unknown Source) 
    at javax.swing.JDialog.<init>(Unknown Source) 
    at UILayer.GroupFrame.<init>(GroupFrame.java:32) 
    at UILayer.GroupFrame.show(GroupFrame.java:21) 
    at java.awt.Component.show(Unknown Source) 
    at java.awt.Component.setVisible(Unknown Source) 
    at java.awt.Window.setVisible(Unknown Source) 
    at java.awt.Dialog.setVisible(Unknown Source) 
    at UILayer.GroupFrame.show(GroupFrame.java:23) 
    at java.awt.Component.show(Unknown Source) 
    at java.awt.Component.setVisible(Unknown Source) 
    at java.awt.Window.setVisible(Unknown Source) 
    at java.awt.Dialog.setVisible(Unknown Source) 
    at UILayer.GroupFrame.show(GroupFrame.java:23) 
    (etc...) 

क्या कोई मुझे गलत कर रहा है पर मुझे इंगित कर सकता है?

अग्रिम धन्यवाद!

+0

और शो() विधि का कोड है? –

+0

क्षमा करें, सही। –

उत्तर

4

आप समूहफ्रेम बनाते हैं, और शो() विधि को कॉल करते हैं, जो एक और समूहफ्रेम बनाता है। यह पहले से ही गलत है। लेकिन यह और भी गलत है क्योंकि आप setVisible(true) पर कॉल करते हैं जो आंतरिक रूप से show() विधि को कॉल करता है जिसे आप अनजाने में ओवरराइड करते हैं।

शो विधि कुछ और नाम दिया जाना चाहिए, और स्थिर होना चाहिए:

public static GroupFrame createAndShow() { 
    GroupFrame dialog = new GroupFrame(); 
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    dialog.setVisible(true); 
} 

इस विधि इस प्रकार इस रूप में कहा जा सकता है:

GroupFrame.createAndShow(); 

और कृपया, अपवाद को पकड़ने नहीं है। और जब आप इसे करते हैं, अपवाद निगलो मत।

+0

धन्यवाद, आपकी पोस्ट ने सबकुछ स्पष्ट कर दिया है। और अपवाद को पकड़ने में क्या समस्या है? यह एक बुरा अभ्यास है? –

+2

हां, यह एक बुरा अभ्यास है। केवल उन अपवादों को पकड़ें जिन्हें आप संभाल सकते हैं। यदि आप इसे संभाल नहीं सकते हैं, तो इसे तब तक ढेर कर दें जब तक इसे संभाला जा सके। –

3

लेकिन फिर मैं सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क) को सार्वजनिक शून्य शो() जैसे कुछ बदलना चाहता हूं।

आप ऐसा नहीं कर सकते हैं, सटीक हस्ताक्षर के साथ मुख्य विधि जावा प्रोग्राम का प्रारंभिक बिंदु है (ज्यादातर मामलों के लिए लेकिन सभी नहीं)।

क्या आप की जरूरत है जो आपके संवाद जाहिर कर देंगे एक अलग show विधि है

संपादित करें:

देखा अपनी कक्षा JDialog फैली हुई है, अगर आप फिर से शो को परिभाषित, आप तकनीकी रूप से विधि वर्तमान में अधिभावी कर रहे हैं, जिसका मतलब है Dialog, इसके अलावा शो को बहिष्कृत किया गया है।

डॉक्स से

:

पदावनत। जेडीके संस्करण 1.5 के रूप में, सेट विज़िबल (बूलियन) द्वारा प्रतिस्थापित किया गया।

संवाद दृश्यमान बनाता है। यदि संवाद और/या उसके मालिक अभी तक प्रदर्शित नहीं हैं, तो दोनों प्रदर्शित किए जा सकते हैं। संवाद दिखाई देने से पहले मान्य होगा। यदि संवाद पहले से ही दिखाई दे रहा है, तो यह संवाद को सामने लाएगा। यदि संवाद मोडल है और पहले से दिखाई नहीं दे रहा है, तो यह कॉल तब तक वापस नहीं आएगा जब तक कि छिपाने या निपटान को कॉल करके संवाद छुपाया न जाए। यह को प्रेषण धागे से मोडल संवाद दिखाने की अनुमति है क्योंकि टूलकिट यह सुनिश्चित करेगा कि जबकि इस विधि को लागू करने वाला एक अन्य ईवेंट पंप चलाया गया है।

इसके बजाय इस का उपयोग करें:

public static void showMyDialog(){ 
    try { 
     GroupFrame dialog = new GroupFrame(); 
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     dialog.setVisible(true); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

और अपने मुख्य विधि में आप showMyDialog कहते हैं।

लेकिन यदि आप इसे जावा एप्लिकेशन के रूप में चलाने के लिए चाहते हैं, तो आपकी विधि में मुख्य विधि मौजूद होनी चाहिए, यदि कोई अन्य वर्ग आपकी शो विधि को कॉल करने जा रहा है तो आपको अपनी कक्षा में मुख्य विधि अस्तित्व की आवश्यकता नहीं है।

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