2008-11-10 14 views
7

मुझे टेक्स्ट फ़ाइल से शब्दों का एक समूह (लगभग 70,000) लोड करने की आवश्यकता है, इसे हैशटेबल में जोड़ें (ध्वनि के रूप में ध्वनि का उपयोग करके) और मानों को क्रमबद्ध करें। इन सभी को करने के दौरान मैं जेपी प्रोग्रेसबार का उपयोग कर एक प्रगति पट्टी दिखाना चाहता हूं। this और this जैसे आलेख, केवल एक गैर-वास्तविक उदाहरण (थोड़ी देर लूप) देता है। क्या कोई मुझे बता सकता है कि मुझे कैसे आगे बढ़ना चाहिए। प्रोग्रेस बार के लिए मूल्य निर्धारित करने के लिए मुझे उपरोक्त स्थिति से कोई संख्या कैसे मिल सकती है? ऐसा लगता है कि ऐसा करने के विभिन्न तरीके हैं - थ्रेड, टाइमर इत्यादि का उपयोग करना। ऊपर की स्थिति के लिए सबसे अच्छी विधि कौन सा हो सकती है?जेपी प्रोग्रेसबार का उपयोग कैसे करें?

+0

यह [जेपी प्रोग्रेसबार के लिए सरल उदाहरण] देखें (http://tutorialdata.com/example/swing/JProgressBarExample.html) –

उत्तर

7

मैं एक समर्पित कार्य धागे पर एक लूप में टेक्स्ट फ़ाइल पढ़ूंगा, न कि ईवेंट-प्रेषण धागा (ईडीटी)। यदि मुझे पढ़ने के लिए शब्दों की कुल संख्या पता है, तो मैं लूप के प्रत्येक पुनरावृत्ति पर पूरा प्रतिशत की गणना कर सकता हूं और तदनुसार प्रगति पट्टी को अपडेट कर सकता हूं।

नमूना कोड

निम्नलिखित कोड preprocessing और postprocessing, एक एनीमेशन है कि इंगित करता है काम हो रहा है प्रदर्शित करने के दौरान अनिश्चित मोड में प्रगति बार डालता है। इनपुट फ़ाइल से इसे पढ़ते समय निर्धारित मोड का उपयोग किया जाता है।

// INITIALIZATION ON EDT 

// JProgressBar progress = new JProgressBar(); 
// progress.setStringPainted(true); 

// PREPROCESSING 

// update progress bar (indeterminate mode) 
SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progress.setIndeterminate(true); 
     progress.setString("Preprocessing..."); 
    } 
}); 

// perform preprocessing (open input file, determine total number of words, etc) 

// PROCESSING 

// update progress bar (switch to determinate mode) 
SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progress.setIndeterminate(false); 
    } 
}); 

int count = 0; 

while (true) 
{ 
    // read a word from the input file; exit loop if EOF 

    // compute soundex representation 

    // add entry to map (hash table) 

    // compute percentage completed 
    count++; 
    final int percent = count * 100/total; 

    // update progress bar on the EDT 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      progress.setString("Processing " + percent + "%"); 
      progress.setValue(percent); 
     } 
    }); 
} 

// POSTPROCESSING 

// update progress bar (switch to indeterminate mode) 
SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progress.setIndeterminate(true); 
     progress.setString("Postprocessing..."); 
    } 
}); 

// perform postprocessing (close input file, etc) 

// DONE! 

SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progress.setIndeterminate(false); 
     progress.setString("Done!"); 
     progress.setValue(100); 
    } 
}); 

सुझाव

  • EDT पर प्रगति बार अद्यतन करने के लिए है, तो के रूप में अपने कोड (SwingUtilities.invokeLater... public void run()...)
+0

उत्कृष्ट काम ज़च! लेकिन मुझे आश्चर्य है कि क्या यह मेरे प्रोग्राम के रास्ते को धीमा कर देगा। ऐसा लगता है कि मुझे इनपुट फ़ाइल को दो बार सेट करना होगा-संख्या निर्धारित करने के लिए। शब्द और प्रत्येक शब्द को संसाधित करने के लिए एक और समय। क्या आपके पास इसके लिए कोई सुझाव है? सभी शब्दों को किसी सरणी में रखने या – javac

+0

जैसे कुछ इस बात पर निर्भर करता है कि बाधा कहां है ... मुझे लगता है कि फ़ाइल को पढ़ने के लिए ध्वनि दृश्य प्रस्तुतियों की गणना करने और उन्हें मानचित्र में जोड़ने से धीमा हो जाएगा। (cont'd ...) –

+0

(... cont'd) यदि हां, तो मैं फ़ाइल को दो बार पढ़ना नहीं चाहूंगा। इसके बजाय मैं फ़ाइल की लंबाई को "कुल" के रूप में उपयोग करता हूं, और "गिनती" के रूप में संसाधित वर्णों की संख्या (यह, ज़ाहिर है, केवल एक अनुमान है क्योंकि फ़ाइल की लंबाई बाइट्स में दी गई है, वर्णों में नहीं)। –

0

फ़ाइल का आकार प्राप्त करें और बाइट्स pr प्रत्येक पुनरावृत्ति पर जोर दिया। इस तरह, आपको फाइल के माध्यम से दो बार चक्र नहीं करना पड़ेगा।

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