7

我使用 Google Wave,我想模拟在您实际按下回车键之前发送消息的能力。

是否有与 C 函数等效的 Java _getch()

4

7 回答 7

5

您可以使用 JLine 库的 ConsoleReader.readVirtualKey() 方法。请参阅http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey()

如果您不想使用 3rd 方库,并且在 Mac OS X 或 UNIX 上,您可以利用 JLine 用来读取单个字符的相同技巧:只需执行命令“stty -icanon min 1" 在运行程序之前,然后 System.in 将不再被行缓冲,您可以使用 System.in.read() 获取单个字符。不幸的是,这个技巧在 Windows 上不起作用,因此您需要使用本机库来帮助(或仅使用 JLine)。

于 2009-12-10T08:56:20.470 回答
2

我找到了一个代码,等效于 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) {  
            }  
        }  
    }
于 2012-04-12T07:07:15.750 回答
0

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

所以答案是“不,没有直接的类似物”。

于 2009-12-08T02:04:54.223 回答
0

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

于 2009-12-08T02:10:07.113 回答
0

这可以解决问题,但我只能从命令行工作。不是来自 IDE

 Console c =System.console();
Reader r = c.reader();
try {
    num=    r.read();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
于 2017-11-15T05:10:29.967 回答
-1

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)
            {  
            }  
        }  
    }
}
于 2013-10-02T21:07:20.640 回答
-3

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

pause0 = pause1.nextInt();

:l 这似乎容易多了...另外你可以写一条消息说“按继续。”;

于 2017-03-21T02:43:42.400 回答