2013-01-22 15 views
5

पर जावा डिस्प्ले बदलती प्रगति मैंने एक जावा प्रोग्राम लिखा है जो फ़ाइल से डेटा लोड करता है और मैं प्रत्येक एन रिकॉर्ड के बाद स्क्रीन पर एक संदेश प्रिंट करके कमांड लाइन पर लोड की प्रगति प्रदर्शित कर रहा हूं, जो दिखता है इस तरह:कमांड लाइन

$> 100 रिकॉर्ड संसाधित।

$> 200 रिकॉर्ड संसाधित।

$> 300 रिकॉर्ड संसाधित।

$> 400 रिकॉर्ड संसाधित।

$> 500 रिकॉर्ड संसाधित।

...

हालांकि, मैं सिर्फ यानी एक लाइन मुद्रित करने के लिए, और केवल संख्या अद्यतन करते हैं, तो यह है कि उत्पादन हमेशा से ही इस तरह दिखता चाहते हैं:

$> संसाधित < एन> रिकॉर्ड।

जावा में यह कैसे करें और, क्या यह भी संभव है?

+0

संभावित डुप्लिकेट की:: इस प्रश्न का उत्तर दिया गया है http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications – Andremoniy

उत्तर

5

यह अपने कंसोल पर निर्भर करता है, लेकिन सबसे आसान तरीका कर्सर पीछे की ओर ले जाने के लिए हाल ही में मुद्रित अक्षरों के सामने, बैकस्पेस वर्ण का उपयोग करने के लिए है:

int[] step = {100,200,300,400,500}; 
System.out.print("$> processed < "); 
for (int i : step) { 
    System.out.print(i + " > records.\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); 
    Thread.sleep(500); 
} 

यह खिड़कियों कमांड लाइन पर काम करता है, लेकिन उदाहरण के लिए यह ग्रहण कंसोल पर काम नहीं करता है।

आपको मुद्रित वर्णों की संख्या गिनने के लिए कुछ अतिरिक्त तर्क जोड़ना चाहिए, और इन सभी "\ b" वर्णों को हार्ड-कोड नहीं करना चाहिए, लेकिन हाल के आउटपुट के आधार पर सही संख्या की गणना करना चाहिए।

@Reza पता चलता है, "\ r" का उपयोग और भी आसान है:

int[] step = {100,200,300,400,500}; 
for (int i : step) { 
    System.out.print("$> processed < " + i + " > records.\r"); 
    Thread.sleep(500); 
} 

यह अभी भी ग्रहण कंसोल पर काम नहीं करता है (लेकिन बैकस्पेस दृष्टिकोण की तुलना में अधिक पठनीय है), लेकिन से निपटने से बचा जाता है सभी बैकस्पेस अक्षर। यदि पहले की तुलना में एक छोटी रेखा मुद्रित करना है, तो पीछे के पात्रों को साफ़ करने के लिए कुछ अतिरिक्त रिक्त स्थान मुद्रित करना आवश्यक हो सकता है।

+1

एंड्रियास - मैं करने के लिए मुद्रण कर रहा हूँ मेरे उबंटू पर टर्मिनल और यह एक आकर्षण की तरह काम करता है। धन्यवाद। – AHL

+0

बीटीडब्लू: लिंक जो @ रेज़ा पोस्ट किया गया है, लाइन की शुरुआत में जाने के लिए "\ r" का उपयोग करने का सुझाव देता है, जो कि और भी आसान हो सकता है - आपको बस पूरी लाइन को फिर से मुद्रित करना होगा। –

+0

सेकेंड कोड एक आकर्षण की तरह काम करता है – Mohsen

1

आपको लाइन की शुरुआत में वापस आने के लिए एक तरीका खोजने की आवश्यकता है और कंसोल पर पहले से ही आउटपुट हो गया है।

How can I return to the start of a line in a console?

+0

मैंने जिस दृष्टिकोण का जिक्र किया है, उसकी कोशिश की, और यह भी काम करता है। क्या मैं दो प्रश्नों को सही के रूप में चिह्नित कर सकता हूं? अगर मैं इस जवाब पर टिक डालता हूं, तो उपरोक्त व्यक्ति अनचाहे हो जाता है। – AHL

+0

@AHL जहां तक ​​मुझे पता है, केवल एक जवाब "स्वीकार किया जा सकता है"। कृपया यहां देखें: [http://meta.stackexchange.com/questions/40200/can-i-accept-two-answers] (http://meta.stackexchange।com/प्रश्न/40200/कर सकते हैं-ए-स्वीकार-दो उत्तर) – RGO