Equivalent function to C's “_getch()” in Java?
我使用Google Wave,并且我想模拟在实际按下Enter键之前发送消息的功能。
是否有Java等效于C函数
我找到了一个代码,等效于C的" _getch()"函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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) { } } } |
您可以使用JLine库的ConsoleReader.readVirtualKey()方法。请参阅http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey()。
如果您不想使用第3方库,并且在Mac OS X或UNIX上,则可以利用JLine能够读取单个字符的相同技巧:只需执行命令" stty -icanon min 1",然后再运行程序,然后System.in将不再行缓冲,并且可以使用System.in.read()获得单个字符。不幸的是,此技巧在Windows上不起作用,因此您需要使用本机库来提供帮助(或仅使用JLine)。
这可以解决问题,但我只能从命令行使用。不是来自IDE
1 2 3 4 5 6 7 8 | Console c =System.console(); Reader r = c.reader(); try { num= r.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } |
Java中针对C的getch()函数的定制方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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) { } } } } |
Java中没有getch等效项。您也可以创建一个GUI组件并绑定keyEvent Listener。
最初,我想到了System.in.read(),但是您无需按Enter就可以获取输入。这需要本机控制台交互(每个系统的控制台都不相同)。
因此答案是"不,没有直接的类似物"。
您为什么不创建一个不在任何地方使用该程序的变量扫描仪。
pause0 = pause1.nextInt();
:l似乎容易得多...另外,您可以输入一条消息,说"按一下继续"。