JNI 在命令列視窗輸入字元,不顯所輸入字元,顯指定的掩飾符

劍握在手發表於2013-11-25

//JNI-命令列視窗輸入字元,顯掩飾符.txt

/*
  目標:在命令列視窗輸入字元,不顯所輸入字元,顯指定的掩飾符
  作者:tangshancheng@21cn.com
*/

1、KeyBoard.java原始碼
//: KeyBoard.java
import java.io.*;

public class KeyBoard {
static { 
    System.loadLibrary("inputdll"); 
  } 
  public native static char get(); 

  public static void main(String[] args) {
   StringBuffer stfDir = new StringBuffer();
    KeyBoard test = new KeyBoard(); 
    char c;
    c=test.get();
    while(c!='\r' && c!='\n'){
     System.out.print('*');//'a'-'A' = 32
     stfDir.append(c);
     c=test.get();
    }
    System.out.println("\nHere is what you input:\n"+ new String(stfDir));
  }
} ///:~

2、編譯、生成標頭檔案(KeyBoard.h)
F:\java>javac KeyBoard.java
F:\java>javah KeyBoard

3、inputdll.cpp檔案具體實現這兩個函式: 
a、在vc中新建...-工程-Win32 Dynamic-Link Library,輸入相關資訊(工程名為inputdll)
b、新建...-檔案-C++Source Files,輸入相關資訊(檔名為inputdll.c)
c、輸入c內容: 
#include "KeyBoard.h" 
#include "conio.h"
JNIEXPORT jchar JNICALL Java_KeyBoard_get (JNIEnv *env, jobject obj){
  char c; 
  c=getch();     
  return c;
}

d、cl -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -LD HelloWorldImp.c -Feinputdll.dll


4、編譯連線成庫檔案,本例是在WINDOWS下做的,生成的是inputdll.dll檔案。
並且名稱要與JAVA中需要呼叫的一致,這裡就是inputdll.dll 

5、把inputdll.dll拷貝到KeyBoard.class所在的目錄下,java KeyBoard執行它,就可以觀察到結果了。

6、執行結果例項:
F:\java>java  KeyBoard
*******
Here is what you input:
1234567

相關文章