匿名用户
1级
2013-04-25 回答
press any key to continue
之前是开玩笑的
要实现你所说的功能就必须有一个从标准输入读取数据时不做任何缓存的方法,
即读取一个字节后马上返回的方法(比如视窗平台上 C/C++ 头文件 conio.h 里声明的 getch( ) )。
可惜的是,到目前为止,Java 里没有这种方法。
就连返回一个字节的 System.in.read( ) 也要等到碰上回车才返回(行缓存,即 line-buffered)。
所以现在你唯一的选择就是通过本机接口(JNI)调用本机方法(native method)。
步骤有 6 个。以下是装有 VC6 的视窗平台上的实现范例:
1)编写我们的 Java 程序。在程序里,以 native 这个关键字为将被调用的本机方法做本机声明,
并且加载我们将在第 5 步里创建的动态连接库:
public class PressAnyKeyToContinue {
static native void pause( ); // 本机声明
public static void main( String[ ] args ) {
System.loadLibrary( "PressAnyKeyToContinue" ); // 加载我们的动态连接库
pause( ); // 调用本机方法跟调用一般的方法没两样
}
}
2)编译我们的 Java 程序,以便生成类文件。
3)用 javah.exe 生成对应的 C/C++ 头文件(PressAnyKeyToContinue.h):命令是 javah PressAnyKeyToContinue 。
4)实现头文件里声明的所有方法 / 函数(这例子用 C,所以以下的代码是在 PressAnyKeyToContinue.c 里):
#include "PressAnyKeyToContinue.h"
JNIEXPORT void JNICALL Java_PressAnyKeyToContinue_pause( JNIEnv * jenv, jclass jc ) {
system( "pause" );
}
5)用编译器生成动态连接库:
命令是 cl -Ic:\jdk2\include -Ic:\jdk2\include\win32 -LD PressAnyKeyToContinue.c 。
(当然,假设了 c:\jdk2\ 是 JDK 的路径。)
6)运行我们的 Java 程序。