2009-01-05 11 views
8

मैंने कंसोल मोड में वर्ण इनपुट को पार्स करने के लिए बस JLine के साथ गड़बड़ करना शुरू कर दिया है। ऐसा लगता है कि यह अच्छी तरह से काम करता है, लेकिन मुझे आश्चर्य है:कंसोल ऐप में जावा कीबोर्ड इनपुट पार्सिंग

क्या जेएलिन में कोई अनब्लॉकिंग तरीका है यह पता लगाने के लिए कि क्या पात्र उपलब्ध हैं? (यानी kbhit() विंडोज़ में।)

मुझे लगता है कि मैं हमेशा अपने धागे में कीबोर्ड इनपुट को लपेट सकता हूं जो तब मुख्य धागे में थ्रेड-सुरक्षित कतार में कीबोर्ड वर्ण प्रदान करता है, लेकिन ऐसा लगता है कि यह अनावश्यक होना चाहिए।

EDIT: यह चरित्र-दर-चरित्र पार्सिंग है। मैं एक जीयूआई का उपयोग नहीं करने जा रहा हूँ। कंसोल मोड में जावा में सामान्य इनपुटस्ट्रीम I/O की आवश्यकता है कि आप पहले एंटर कुंजी दबाएं (उदा। यह केवल इनपुट बफर्ड है)। कृपया मुझे बताएं कि जावा में कंसोल मोड में वर्ण-दर-चरित्र इनपुट असंभव है; यह नहीं है जेएलिन एक प्लेटफार्म-आधारित कार्यान्वयन के साथ एक पोर्टेबल इंटरफ़ेस का उपयोग करता है।

अद्यतन संपादित: आप पार्स करने के लिए Ctrl-C है: मैं एक कार्यकर्ता धागा (प्रति-चरित्र आई/ओ, चेतावनी के लिए JLine का उपयोग करने में अवरुद्ध I/O करने के लिए एक साथ हैक करने के लिए एक सहायक वर्ग में सक्षम था स्वयं!) & फिर एक isempty() दिनचर्या के साथ एक सिंक्रनाइज़ कतार के माध्यम से संवाद। मैं अभी जो कर रहा हूं उसके लिए यह ठीक है, लेकिन मैं वास्तव में भविष्य में ऐसा करने का एक अच्छा तरीका जानना चाहता हूं।

+4

क्या आप उत्तर का एक स्निप पोस्ट कर सकते हैं? बहुत दिलचस्प लग रहा है। – OscarRyz

उत्तर

4

आप सही रास्ते पर होने लगते हैं।

मुझे लगता है कि ऐसा करने का "सही" तरीका एक कार्यकर्ता धागा है जो सभी अवरुद्ध I/O को एक गैर-अवरुद्ध कतार में डाल देता है। java.util.concurrent से ConcurrentLinkedQueue पर एक नज़र देखें।

3

आप देशी पुस्तकालयों के बिना गैर-अवरुद्ध इनपुट प्राप्त करने के लिए कंसोल का उपयोग नहीं कर सकते हैं।

आप एक स्विंग एप्लिकेशन लिखने और लिखने एक KeyListener

इस ट्यूटोरियल पढ़ें करना होगा: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

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