Эквивалентная функция C "_getch ()" в Java? - PullRequest
5 голосов
/ 08 декабря 2009

Я использую Google Wave и хочу эмулировать возможность отправлять сообщения, прежде чем вы действительно нажмете клавишу ввода.

Существует ли Java-эквивалент функции C _getch()?

Ответы [ 7 ]

4 голосов
/ 12 апреля 2012

Я нашел код, эквивалентный функции C '_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) {  
            }  
        }  
    }
1 голос
/ 10 декабря 2009

Вы можете использовать метод ConsoleReader.readVirtualKey () библиотеки JLine. Смотри http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey().

Если вы не хотите использовать стороннюю библиотеку и используете Mac OS X или UNIX, вы можете просто воспользоваться тем же приемом, который использует JLine для чтения отдельных символов: просто выполните команду перед запуском вашей программы введите команду "stty -icanon min 1", и тогда System.in больше не будет буферизоваться строкой, и вы можете получить отдельный символ с помощью System.in.read () К сожалению, этот трюк не работает в Windows, поэтому вам нужно использовать собственную библиотеку, чтобы помочь (или просто использовать JLine).

1 голос
/ 08 декабря 2009

Нет эквивалента getch в Java. Вы также можете создать компонент GUI и связать прослушиватель keyEvent.

0 голосов
/ 15 ноября 2017

Это сделает свое дело, но я работаю только из командной строки. Не из IDE

 Console c =System.console();
Reader r = c.reader();
try {
    num=    r.read();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
0 голосов
/ 21 марта 2017

почему бы вам просто не создать переменный сканер, который не использует его, программу, где угодно.

pause0 = pause1.nextInt ();

: l мне кажется, это намного проще ... Плюс вы можете поместить сообщение с надписью "Нажмите, чтобы продолжить.";

0 голосов
/ 03 октября 2013

Пользовательский метод в Java для функции getch () из C



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)
            {  
            }  
        }  
    }
}
0 голосов
/ 08 декабря 2009

Изначально я думал о System.in.read (), но вам нужно получить ввод, не нажимая Enter. Это требует взаимодействия с собственной консолью (и консоль отличается в каждой системе).

Итак, ответ «нет, прямого аналога нет».

...