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

时间:2009-12-08 01:42:42

标签: java c getch

我使用的是Google Wave,我希望在您实际按Enter键之前模拟发送邮件的功能。

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

7 个答案:

答案 0 :(得分:4)

我找到了一个代码,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 :(得分:1)

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

答案 2 :(得分:1)

您可以使用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)。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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)
            {  
            }  
        }  
    }
}

答案 5 :(得分:0)

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

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

答案 6 :(得分:-1)

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

pause0 = pause1.nextInt();

:l它似乎更容易......另外你可以发一条消息说"按继续。";