Я использую Google Wave и хочу эмулировать возможность отправлять сообщения, прежде чем вы действительно нажмете клавишу ввода.
Существует ли Java-эквивалент функции C _getch()?
_getch()
Я нашел код, эквивалентный функции 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) { } } }
Вы можете использовать метод 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).
Нет эквивалента getch в Java. Вы также можете создать компонент GUI и связать прослушиватель keyEvent.
Это сделает свое дело, но я работаю только из командной строки. Не из IDE
Console c =System.console(); Reader r = c.reader(); try { num= r.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
почему бы вам просто не создать переменный сканер, который не использует его, программу, где угодно.
pause0 = pause1.nextInt ();
: l мне кажется, это намного проще ... Плюс вы можете поместить сообщение с надписью "Нажмите, чтобы продолжить.";
Пользовательский метод в 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) { } } } }
Изначально я думал о System.in.read (), но вам нужно получить ввод, не нажимая Enter. Это требует взаимодействия с собственной консолью (и консоль отличается в каждой системе).
Итак, ответ «нет, прямого аналога нет».