如果您不想使用第三方库,并且您使用的是Mac OS X或UNIX,那么您可以利用JLine用于读取单个字符的相同技巧:只需在运行程序之前执行命令“stty-icanon min 1”,然后运行系统。in将不再进行行缓冲,您可以使用系统获取单个字符。在里面read()。不幸的是,这个技巧在Windows上不起作用,所以您需要使用本机库来提供帮助(或者只使用JLine)
# 6 楼答案
C的getch()函数的Java定制方法
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)
{
}
}
}
}
# 1 楼答案
java中没有等价的getch。您还可以创建一个GUI组件并绑定keyEvent侦听器
# 2 楼答案
最初我想到的是系统。在里面read(),但您需要在不按Enter键的情况下获取输入。这需要本机控制台交互(每个系统下的控制台都不同)
所以答案是“不,没有直接模拟”
# 3 楼答案
这就可以了,但我只在命令行中工作。不是从IDE
# 4 楼答案
我找到了一个代码,与C的“_getch()相当的函数
# 5 楼答案
您可以使用JLine库的ConsoleReader。readVirtualKey()方法。见http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey()
如果您不想使用第三方库,并且您使用的是Mac OS X或UNIX,那么您可以利用JLine用于读取单个字符的相同技巧:只需在运行程序之前执行命令“stty-icanon min 1”,然后运行系统。in将不再进行行缓冲,您可以使用系统获取单个字符。在里面read()。不幸的是,这个技巧在Windows上不起作用,所以您需要使用本机库来提供帮助(或者只使用JLine)
# 6 楼答案
C的getch()函数的Java定制方法