2009-12-08 13 views
5

मैं Google वेव का उपयोग करता हूं, और मैं वास्तव में एंटर कुंजी दबाए जाने से पहले संदेश भेजने की क्षमता का अनुकरण करना चाहता हूं।जावा में सी के "_getch()" के बराबर कार्य?

क्या कोई जावा सी फंक्शन _getch() के बराबर है?

+8

'_getch()' मानक सी – GManNickG

उत्तर

0

प्रारंभ में मैंने System.in.read() के बारे में सोचा, लेकिन आपको एंटर दबाए बिना इनपुट प्राप्त करने की आवश्यकता है। इसके लिए देशी कंसोल इंटरैक्शन की आवश्यकता होती है (और प्रत्येक सिस्टम के तहत कंसोल अलग होता है)।

तो उत्तर "नहीं, कोई प्रत्यक्ष एनालॉग नहीं है"।

1

जावा में कोई समकक्ष समकक्ष नहीं है। आप एक जीयूआई घटक भी बना सकते हैं और keyEvent श्रोता को बांध सकते हैं।

1

आप जेलाइन लाइब्रेरी के ConsoleReader.readVirtualKey() विधि का उपयोग कर सकते हैं। http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey() देखें।

यदि आप किसी तृतीय पक्ष लाइब्रेरी का उपयोग नहीं करना चाहते हैं, और यदि आप मैक ओएस एक्स या यूनिक्स पर हैं, तो आप केवल उसी चाल का लाभ उठा सकते हैं जो जेएलइन व्यक्तिगत वर्णों को पढ़ने में सक्षम होने के लिए उपयोग करता है: बस निष्पादित करें आपके प्रोग्राम को चलाने से पहले "stty -icanon min 1" कमांड, और उसके बाद System.in अब लाइन buffered नहीं होगा और आप System.in.read() का उपयोग कर एक व्यक्तिगत वर्ण प्राप्त कर सकते हैं। दुर्भाग्यवश, यह चाल विंडोज पर काम नहीं करती है, इसलिए आपको मदद करने के लिए मूल पुस्तकालय का उपयोग करने की आवश्यकता होगी (या केवल जेएलआईएन का उपयोग करें)।

4

मैं सी "_getch()


public static void getCh() { 
     final JFrame frame = new JFrame(); 
     synchronized (frame) { 
      frame.setUndecorated(true); 
      frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 
      frame.addKeyListener(new KeyListener() { 
       @Override 
       public void keyPressed(KeyEvent e) { 
        synchronized (frame) { 
         frame.setVisible(false); 
         frame.dispose(); 
         frame.notify(); 
        } 
       } 
       @Override 
       public void keyReleased(KeyEvent e) { 
       } 
       @Override 
       public void keyTyped(KeyEvent e) { 
       } 
      }); 
      frame.setVisible(true); 
      try { 
       frame.wait(); 
      } catch (InterruptedException e1) { 
      } 
     } 
    } 
+0

नहीं है मुझे सही अगर मैं गलत हूँ, लेकिन नहीं 'keyPressed',' keyReleased', और 'है keyTyped' चाहिए' @ Override' उनके सामने? मुझे नहीं लगता कि यह अन्यथा काम करेगा। इसके अलावा, उत्कृष्ट जवाब। +1 – aggregate1166877

+4

@ ओवरराइड सिर्फ एक एनोटेशन है, विधि ओवरराइडिंग अभी भी इसके बिना ठीक काम करता है। यह सब संकलक को बताता है कि विधि * किसी अन्य विधि को ओवरराइड करना चाहिए। – lynks

+2

यह फ़ंक्शन सी के _getch() के बराबर कैसे है यदि यह शून्य हो जाता है? क्या इसे एक चरित्र वापस करने की आवश्यकता नहीं होगी? चूंकि यह नोटेशन ओवरराइड कर चुका है, क्या हमें कोड लिखने की आवश्यकता है जो इसे उपयोग करने के लिए लागू करता है? – Joe

0

कस्टम निर्मित getch के लिए जावा में विधि() सी



import java.awt.event.KeyListener; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

class getch 
{ 
    public static void getCh() 
    { 
     final JFrame frame = new JFrame(); 
     synchronized(frame) 
     { 
      frame.setUndecorated(true); 
      frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 
      frame.addKeyListener(new KeyListener() 
      { 
       public void keyPressed(KeyEvent e) 
       { 
        synchronized(frame) 
        { 
         frame.setVisible(false); 
         frame.dispose(); 
         frame.notify(); 
        } 
       } 

       public void keyReleased(KeyEvent e) 
       { 
       } 

       public void keyTyped(KeyEvent e) 
       { 
       } 
      }); 
      frame.setVisible(true); 
      try 
      { 
       frame.wait(); 
      } 
      catch(InterruptedException e1) 
      { 
      } 
     } 
    } 
} 
का कार्य करने के लिए एक कोड, समतुल्य समारोह पाया
-1

आप एक वैरिएबल स्कैनर क्यों नहीं बनाते हैं जो इसे कहीं भी प्रोग्राम का उपयोग नहीं करता है।

pause0 = pause1.nextInt();

: एल यह बहुत आसान लगता है ... इसके अलावा आप "जारी रखने के लिए दबाएं" कहकर एक संदेश डाल सकते हैं;

0

यह चाल करेगा लेकिन मैं केवल कमांड लाइन से काम करता हूं। नहीं आईडीई से

Console c =System.console(); 
Reader r = c.reader(); 
try { 
    num= r.read(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
संबंधित मुद्दे