दिलचस्प पोस्ट
एंड्रॉइड: ऐप आइकन के अलावा अन्य होने के लिए एक्शनबार "होम" आइकन को कैसे बदल सकता है? किसी अन्य तालिका से प्राप्त किए गए किसी टेबल रिकॉर्ड में INSERT कैसे करें कैसे कोड और परीक्षण से एक रिश्तेदार फाइल को संदर्भित करने के लिए Microsoft.ACE.OLEDB.12.0 प्रदाता पंजीकृत नहीं है नियंत्रक से डेटा गुजरने के लिए टाइप करें symfony2 स्ट्रिंग के संभव संयोजन प्रदर्शित करें ES6 टेम्पलेट लिटरल्स के लिए निष्पादन हटाएं क्या पीसी के माध्यम से iTunes का उपयोग किए बिना यूडीआईडी ​​प्राप्त करने के लिए आईओएस (आईओएस 7 रिलीज) के बाद कोई रास्ता है? सीमा के किनारे पर लिंक के साथ एक चक्र कैसे बनाएं UITableView की पृष्ठभूमि को स्पर्श करके कीबोर्ड को खारिज करें अगर मैं फ़ायरबेस सरल यूज़रनेम और पासवर्ड प्रमाणीकरण का उपयोग करता हूं तो मैं उपयोगकर्ताओं की सूची कैसे वापस करूँ? JQuery UI स्वत: पूर्ण में सीमा परिणाम IMEI को आईफोन पर कैसे प्राप्त करें? () पर jQuery का उपयोग करते समय, क्यों उपयोग (दस्तावेज़) बनाम तत्व ही? पायथन में, अगर मैं Google ऐप इंजिन एसडीके में हूं तो मैं कैसे परीक्षण कर सकता हूं?

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

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

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();