दिलचस्प पोस्ट
पंडों में बूलियन अनुक्रमण के लिए लॉजिक ऑपरेटर कैसे बताओ जब UITableVIew ने पुनः लोडडेटा पूरा कर लिया है? मानचित्रण करते समय मूल्य परिवर्तित करें स्पष्ट वादा निर्माण antipattern क्या है और मैं इसे कैसे से बचने करूँ? जावास्क्रिप्ट में ऑलमैन शैली के खतरनाक निहितार्थ क्या यह गतिशील रूप से संकलन और सी # कोड टुकड़े निष्पादित करने के लिए संभव है? मिल-डाल सिद्धांत का स्पष्टीकरण * NgFor के लिए फ़िल्टर कैसे लागू करें जावा सरणी को मुद्रित करने का सबसे आसान तरीका क्या है? मैं StackOverflowException को कैसे रोका और / या संभालता हूं? क्या कोई कार्टेसीयन उत्पाद करने के लिए एक अच्छा LINQ तरीका है? डेल निर्यात फ़ंक्शन को एन्यूमरेट करने के लिए Win32 API? मैं PHP में एक साधारण क्रॉलर कैसे बनाऊं? url से htaccess निकालें index.php स्ट्रिंगबिल्डर और स्ट्रिंगबफर के बीच का अंतर

जावा में सांत्वना से एक एकल अक्षर कैसे पढ़ा जाए (उपयोगकर्ता के प्रकार के रूप में)?

कंसोल से एक एकल अक्षर को पढ़ने का एक आसान तरीका है क्योंकि उपयोगकर्ता इसे जावा में टाइप कर रहा है? क्या यह संभव है? मैंने इन विधियों के साथ कोशिश की है, लेकिन वे सभी उपयोगकर्ता के लिए प्रवेश कुंजी दबाकर प्रतीक्षा करते हैं:

char tmp = (char) System.in.read(); char tmp = (char) new InputStreamReader(System.in).read (); char tmp = (char) System.console().reader().read(); // Java 6 

मैं सोचने लगा हूँ कि जब तक प्रवेश दर्ज नहीं होता है, तब तक System.in को उपयोगकर्ता इनपुट के बारे में जानकारी नहीं है।

वेब के समाधान से एकत्रित समाधान "जावा में सांत्वना से एक एकल अक्षर कैसे पढ़ा जाए (उपयोगकर्ता के प्रकार के रूप में)?"

आप क्या करना चाहते हैं, "कच्चा" मोड में कंसोल को डाल दिया जाता है ("लाइन" संपादन बाईपास और कोई कुंजी दर्ज करने की आवश्यकता नहीं है) के रूप में "पकाया" मोड के विपरीत (आवश्यक प्रविष्ट कुंजी के साथ लाइन संपादन)। यूनिक्स सिस्टम पर, 'stty' कमांड परिवर्तन मोड

अब, जावा के संबंध में … पायथन और जावा में गैर अवरुद्ध कन्सोल इनपुट देखें अंश:

यदि आपके प्रोग्राम को कंसोल आधारित होना चाहिए, तो आपको अपने टर्मिनल को लाइन मोड से चरित्र मोड में बदलना होगा, और इसे अपने प्रोग्राम के सामने आने से पहले इसे पुनर्स्थापित करना याद रखना होगा। ऑपरेटिंग सिस्टम में ऐसा करने का कोई पोर्टेबल तरीका नहीं है

सुझावों में से एक जेएनआई का उपयोग करना है फिर, वह बहुत पोर्टेबल नहीं है धागे के अंत में एक और सुझाव, और उपरोक्त पोस्ट के साथ आम में, jCurses का उपयोग करने पर विचार करना है

आपको अपने कंसोल को कच्चा मोड में दस्तक करने की आवश्यकता है। वहाँ कोई अंतर्निहित प्लेटफॉर्म नहीं है-वहां पहुंचने का स्वतंत्र तरीका jCurses दिलचस्प हो सकता है, हालांकि।

यूनिक्स सिस्टम पर, यह काम कर सकता है:

  String[] cmd = {"/bin/sh", "-c", "stty raw </dev/tty"}; Runtime.getRuntime().exec(cmd).waitFor(); 

उदाहरण के लिए, यदि आप कुंजीस्ट्रोक के बीच के समय को ध्यान में रखना चाहते हैं, तो वहां पाने के लिए यहां नमूना कोड है।

जावा कंसोल से कच्चे अक्षरों को पढ़ने का कोई पोर्टेबल तरीका नहीं है

कुछ प्लेटफार्म पर निर्भर कार्यवाही ऊपर प्रस्तुत किए गए हैं। लेकिन वास्तव में पोर्टेबल होने के लिए, आपको कंसोल मोड को छोड़ना होगा और विंडोिंग मोड का उपयोग करना होगा, जैसे एडब्ल्यूटी या स्विंग

मैंने एक जावा क्लास RawConsoleInput लिखा है जो Windows और यूनिक्स / लिनक्स के ऑपरेटिंग सिस्टम कार्यों को कॉल करने के लिए जेएनए का उपयोग करता है।

  • विंडोज़ पर यह msvcrt.dll से _kbhit() और _getwch() का उपयोग करता है।
  • यूनिक्स पर यह कंसोल से कंसोल को tcsetattr() करने के लिए tcsetattr() का उपयोग करता है, यह देखने के लिए कि क्या डेटा उपलब्ध है और System.in.read() कंसोल से बाइट्स पढ़ने के लिए System.in.read() एक CharsetDecoder को बाइट्स को वर्णों में कनवर्ट करने के लिए उपयोग किया जाता है।

यह गैर अवरुद्ध इनपुट और कच्चे मोड और सामान्य लाइन मोड इनपुट मिश्रण का समर्थन करता है।

Jline3 का उपयोग करें:

उदाहरण:

 Terminal terminal = TerminalBuilder.builder() .jna(true) .system(true) .build(); // raw mode means we get keypresses rather than line buffered input terminal.enterRawMode(); reader = terminal .reader(); ... int read = reader.read(); .... reader.close(); terminal.close();