最近看到一个问题,如何用Java实现从控制台输入密码?本来以为是很简单的问题,查了一下发现Java居然没提供这样一个方法。目前实现的方式有2个,一个是利用JNI来调用C/C++方法,另一个是使用多线程。下面是使用JNI的方法:首先,写出我们的Java类:
这一段使用System.loadLiberary("..");来加载本地类库,PasswordDLL是文件名,不需要加dll后缀,系统会自动辨认。编译成JNIPasswordReader.class以后,使用javah -jni JNIPasswordReader 命令,生成一个JNIPasswordReader.h文件,文件内容如下:
然后,我们需要写一个cpp文件来实现JNIEXPORT jstring JNICALL Java_JNIPasswordReader_readPassword (JNIEnv *, jobject);接口。于是,我写了一个PasswordDLL.cpp文件,内容如下:
我使用VS2005来生成对应的dll文件,在生成之前,需要把$JDK_HOME/include/jni.h和$JDK_HOME/include/win32/jni_md.h这两个文件copy到Microsoft Visio Studio 8/VC/include目录下,我就在这里卡了大概1个小时,一直说找不到jni.h文件然后就可以使用VS2005来生成dll了,生成好对应的PasswordDLL.dll以后,把该dll文件放到系统变量PATH能找到的地方,比如windows/system32/或者jdk/bin目录,我是放到JDK_HOME/bin下面了放好以后,执行java JNIPasswordReader就可以输入密码了。关于JNI的更详细内容,可以参考:《在Windows中实现Java本地方法》http://www.ibm.com/developerworks/cn/java/jnimthds/index.html我的Password.dll文件http://www.blogjava.net/Files/richardeee/PasswordDLL.zip
Powered by: BlogJava Copyright © Zou Ang