//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