亚洲精品成人18久久久久_日韩欧美色_江苏极品身材白嫩少妇自拍_曰本人做爰大片免费观看一老师_久草视频网_最近中文字幕MV高清在线视频

首頁 > 考試輔導 > 計算機考試 > JAVA認證 > JAVA認證交流指導 > JNI調用C/C++方法從控制臺輸入密碼

JNI調用C/C++方法從控制臺輸入密碼

        最近看到一個問題,如何用java實現從控制臺輸入密碼?
    本來以為是很簡單的問題,查了一下發現java居然沒提供這樣一個方法。目前實現的方式有2個,一個是利用jni來調用c/c++方法,另一個是使用多線程。
下面是使用jni的方法:
首先,寫出我們的java類:


public   class  jnipasswordreader  {

     private   native  string readpassword();
     static {
        system.loadlibrary( " passworddll " );
    }
     / */ /
     *  @param  args
      */
     public   static   void  main(string[] args)  {
         //  todo auto-generated method stub
        jnipasswordreader reader  =   new  jnipasswordreader();
        string pwd  =  reader.readpassword();
        system.out.println( " \nyour password is: "   +  pwd);
    }

}

    這一段使用system.loadliberary("..");來加載本地類庫,passworddll是文件名,不需要加dll后綴,系統會自動辨認。

編譯成jnipasswordreader.class以后,使用
javah -jni jnipasswordreader
命令,生成一個jnipasswordreader.h文件,文件內容如下:

// /*  do not edit this file - it is machine generated  */
#include  < jni.h >
// /*  header for class jnipasswordreader  */

#ifndef _included_jnipasswordreader
#define  _included_jnipasswordreader
#ifdef __cplusplus
extern   " c "   {
#endif
// /*
 * class:     jnipasswordreader
 * method:    readpassword
 * signature: ()ljava/lang/string;
  */
jniexport jstring jnicall java_jnipasswordreader_readpassword
  (jnienv  * , jobject);

#ifdef __cplusplus
}
#endif
#endif

然后,我們需要寫一個cpp文件來實現
jniexport jstring jnicall java_jnipasswordreader_readpassword  (jnienv *, jobject);
接口。
于是,我寫了一個passworddll.cpp文件,內容如下:

//  這是主 dll 文件。
#include  " stdafx.h "
#include  " jnipasswordreader.h "
#include  < iostream >
#include  < iomanip >
#include  < conio.h >
using   namespace  std;

// /*
 * class:     jnipasswordreader
 * method:    readpassword
 * signature: ()v
  */
jniexport jstring jnicall java_jnipasswordreader_readpassword
  (jnienv  *  env, jobject) {
       char  str[ 20 ]  =   { 0 } ; 
    jstring jstr;
     char  ch;
     char   * pstr  =  str;
     while ( true )
     {
        ch  =  getch();
         if (isdigit(ch) || isalpha(ch))
         {
            cout << " * " ;
             * pstr ++   =  ch;
        }
         else   if (ch  ==   ' \b '   &&  pstr  >  str)
         {
             * ( -- pstr)  =   0 ;
            cout << " \b \b " ;
        }
         else   if (ch  ==   0x0a   ||  ch  ==   0x0d )
         {
             break ;
        }
    }
    jstr  =  env -> newstringutf(str);
     return  jstr;
}

    我使用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
就可以輸入密碼了。

主站蜘蛛池模板: 日韩五码在线观看 | 毛片a久久99亚洲欧美毛片 | 视频二区精品中文字幕 | 国产第一区 | 天堂一区在线 | av网站免费播放 | 日本丰满少妇裸体自慰 | 久久高清亚洲 | 人妻丰满熟AV无码区HD | 免费福利在线看 | 国产一级AⅤ久久无码 | 欧美性xxxx禁忌 | 日韩欧美精品人妻一区二区不卡 | 爱色av网| 国产成人愉拍免费视频 | 暖暖免费高清日本社区在线观看 | 午夜视频在线观 | 老司机在线精品 | 曰韩黄色片 | 少妇性色午夜淫片aaaze | 好紧好湿好黄的视频 | 色综合久久无码中文字幕 | 91夜色| 久久男人的天堂 | 大地资源网高清在线观看 | 午夜欧美一区二区三区免费观看 | 久久免费公开视频 | 日本伊人精品一区二区三区介绍 | 强●媚薬レズ狂いatid543 | 国产免费又黄又爽又色毛 | 国产欧美日韩一区2区 | 黄色成年人国语版在线观看 | 人人澡av | 97人人添人澡人人爽超碰 | 麻豆专媒体一区二区 | 国产ww久久久久久久久久 | 精品人妻系列无码人妻免费视频 | 黄色影院免费看 | 免费一级毛片视频 | 一级毛片影视 | 一区二区三区在线观看欧美 |