2011-01-07 14 views
6

मैंने एक जावा एप्लिकेशन लिखा है जिसमें थोड़ी देर है (input.readLine()) जो उपयोगकर्ता को छोड़ने के आदेश को छोड़ने तक इनपुट पढ़ने जारी रखता है। मेरे पास विंडोज़ में लॉन्च करने के लिए .bat स्क्रिप्ट है और इसे लिनक्स में लॉन्च करने के लिए .sh है। आवेदन दोनों में ठीक काम करता है।मैं लिनक्स खोल में बाएं/दाएं/ऊपर/नीचे तीर इनपुट कैसे स्वीकार करूं?

विंडोज़ में रहते हुए, यदि आप "ईमेल जांचें" जैसे कमांड टाइप करते हैं और एंटर दबाते हैं, तो यह कमांड करेगा। फिर, अगली प्रॉम्प्ट पर (यानी: अगली बार जावा एप्लिकेशन इनपुट की एक पंक्ति पढ़ता है) आप ऊपर तीर दबा सकते हैं और यह आपके "चेक ईमेल" कमांड को याद करता है। आप अपने कर्सर को बाएं स्थानांतरित करने के लिए बाएं तीर कुंजी दबा सकते हैं। यह बिल्कुल ठीक है कि मैं इसे कैसे चाहता हूं।

लिनक्स पर, हालांकि, मुख्य कारणों को दबाकर^[[डी प्रकट होता है। बाएं और दाएं तीर कुंजी समान ASCII आउटपुट उत्पन्न करती हैं, जैसे^[[सी।

मैंने stty के बारे में सुना है और मैन पेज को देखा है, लेकिन यह पता नहीं लगा सकता कि मुझे जावा एप्लिकेशन लॉन्च करने के साथ .sh स्क्रिप्ट में क्या बदलने की ज़रूरत है। क्या कोई मेरी मदद कर सकता है?

उत्तर

1

readline फ़ंक्शन का उपयोग यूनिट पर इस सामान के लिए किया जाता है, लेकिन यह एक सी फ़ंक्शन है।

Here आप इसके लिए जावा रैपर ढूंढ सकते हैं। (मैंने कभी इसका इस्तेमाल नहीं किया)

4

सबसे आसान समाधान बाहरी आवरण का उपयोग करना है जो संस्करण क्षमताओं के साथ एक पंक्ति पढ़ता है, फिर इसे आपके प्रोग्राम में भेजता है। एक अच्छा रैपर rlwrap है।

एक अलग उपकरण का उपयोग अलग-अलग उद्देश्यों (लाइन संस्करण और जो भी आपका प्रोग्राम करता है) के लिए अलग-अलग टूल का उपयोग करने के यूनिक्स दर्शन को ध्यान में रखते हुए है। यह भी आसान है: myprogram के बजाय बस अपना खोल रैपर rlwrap myprogram चलाएं।

अंतर्निहित readline library (जावा में किसी भी readLine विधि से कोई संबंध नहीं है, आप इस तरह के रूप Java-Readline एक जावा आवरण चाहता हूँ) एकीकृत करने के लिए और अधिक काम है, और अपने कार्यक्रम रोकें जीपीएल किया जाना है। इसके लिए केवल तभी जाएं जब आप एक रैपर प्रदान कर सकते हैं - मुख्य रूप से एप्लिकेशन-विशिष्ट समापन।

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