2012-08-30 9 views
6

प्रोग्राम के लिए कमांड लाइन इंटरफ़ेस का हिस्सा मैं कई प्रगति सलाखों के लिए कॉल लिख रहा हूं। मैं वर्तमान में इस के समान कुछ के साथ \r भागने क्रम का उपयोग करके कंसोल में एक पंक्ति को अद्यतन कर सकते हैं:जावा कमांड लाइन इंटरफ़ेस: ' r'

System.out.printf("\rProcess is %d%% complete", percentageComplete); 

हालांकि गाड़ी वापसी केवल कि लाइन की शुरुआत करने के लिए वापस चला जाता है। मैं दो लाइनों (या अधिक आम तौर पर, लाइनों की किसी भी संख्या) पर जाने का एक तरीका चाहता हूं और उन्हें दोनों/सभी अपडेट करें।

क्या ऐसा करने का कोई तरीका है?

+1

यह आसान नहीं है। इन सवालों की जांच करें। http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications?lq=1 http://stackoverflow.com/questions/4906141/move-printing -शन-ऑफ-कमांड-लाइन-इंटरफ़ेस-इन-जावा-बिना-उपयोग-बाहरी? lq = 1 http://stackoverflow.com/questions/439799/whats-a-good-java-curses- जैसे-पुस्तकालय के लिए टर्मिनल-अनुप्रयोगों – Flavio

उत्तर

2

दुर्भाग्यवश \r के बराबर नहीं है जो कर्सर को ऊपर ले जाता है। हालांकि, यह एएनएसआई एस्केप अनुक्रमों के साथ किया जा सकता है, जब तक आप मान सकते हैं कि आप एएनएसआई-अनुरूप टर्मिनल पर हैं।

एएनएसआई कोड का उपयोग कर अपनी प्रगति सलाखों मुद्रित करने के लिए, आप

System.out.printf(((char) 0x1b) + "[1A\r" + "Item 1: %d ", progress1); 
System.out.printf(((char) 0x1b) + "[1B\r" + "Item 2: %d ", progress2); 

कर सकता है एएनएसआई कोड के साथ ही समस्या यह है कि लगभग सभी टर्मिनलों एएनएसआई कोड का उपयोग करते हुए, the Win32 Terminal doesn't। मैंने इसका परीक्षण नहीं किया है, लेकिन this library ऐसा लगता है कि अगर आपको विंडोज टर्मिनल में निर्मित समर्थन का समर्थन करना है तो यह अच्छी बात होगी। इसमें एक जेएनआई लाइब्रेरी शामिल है जो विंडोज टर्मिनल पर समकक्ष चीजें करेगी, और स्वचालित रूप से निर्णय लेगी कि जेएनआई लाइब्रेरी या एएनएसआई कोड का उपयोग करना है या नहीं। इसका उपयोग करने के लिए एएनएसआई कोड को थोड़ा आसान बनाने के कुछ तरीके भी हैं।

4

मैंने कमांड लाइन प्रगति सलाखों के लिए एक छोटी परियोजना लिखी है जो या तो एक लाइनर या "मास्टर/विस्तार" कर सकती है - https://github.com/tomas-langer/cli/tree/master/cli-progress देखें। यह विंडोज़ पर भी काम करता है - एमएस विंडोज (चाक + जांसी)

यदि आप और करना चाहते हैं, तो चाक लाइब्रेरी (https://github.com/tomas-langer/chalk) की जांच करें जो बदले में जांसी का उपयोग करता है (पहले से ही पिछली पोस्ट में उल्लिखित)।

लाइन अप और स्पष्ट रेखा के लिए ansi escape कोड चाक लाइब्रेरी में हैं। उनका उपयोग करने के लिए:

import com.github.tomaslanger.chalk.Ansi; 
... 
System.out.print(Ansi.cursorUp(2)); //move cursor up two lines 
System.out.print(Ansi.eraseLine()); //erase current line