Java中C的“_getch()”的等效函数?

我使用Google Wave,我想模仿在您实际按Enter键之前发送消息的function。

是否存在与C函数_getch()等效的Java?

我找到了一个代码,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) { } } } 

java中没有getch等价物。 您也可以创建一个GUI组件并绑定keyEvent侦听器。

您可以使用JLine库的ConsoleReader.readVirtualKey()方法。 请参阅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)。

最初我想到了System.in.read(),但你需要输入而不按Enter键。 这需要本机控制台交互(并且每个系统下的控制台都不同)。

所以答案是“不,没有直接的模拟”。

Java中用于C的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) { } } } } 

这将做的伎俩但我只能从命令行工作。 不是来自IDE

  Console c =System.console(); Reader r = c.reader(); try { num= r.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

你为什么不在任何地方创建一个不使用它的变量Scanner,程序。

pause0 = pause1.nextInt();

:l似乎更容易……另外你可以发一条消息说“按继续。”;