南汉开国皇帝:请问在JAVA中怎么实现在控制台下press any key to continue的功能?

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 17:51:38
在控制台下怎么才能实现呢?
System.out.print("Press any key to continue...");
br.read();//br是BufferedReader的对象,假设在前面已经定义。
这样写不好使,请问怎么才能够实现呢?
我想在一个命令提示行的程序中实现:当完成某一个操作时(例如添加一条信息成功以后)显示“操作成功,请按任意键继续!”,并且按下任意键(可以不按Enter)的时候程序继续往下执行。说白了就是系统等待用户输入一个任意字符后继续往下执行。

 
 
 
要实现你所说的功能就必须有一个从标准输入读取数据时不做任何缓存的方法,
即读取一个字节后马上返回的方法(比如视窗平台上 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 程序。
 
 
 

你先告诉我 你到底想干什么