最近看到一個問題,如何用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://m.tkk7.com/Files/richardeee/PasswordDLL.zip
Powered by: BlogJava Copyright © Zou Ang