当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

JNI调用C/C++办法从掌握台输入密码[Java编程]

赞助商链接



  本文“JNI调用C/C++办法从掌握台输入密码[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

近来看到一个问题,若何用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
便可以输入密码了.

关于JNI的更具体内容,可以参考:
《在Windows中实现Java本地办法》http://www.ibm.com/developerworks/cn/java/jnimthds/index.html

我的Password.dll文件
http://www.blogjava.net/Files/richardeee/PasswordDLL.zip


  以上是“JNI调用C/C++办法从掌握台输入密码[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • JNI调用C/C++办法从掌握台输入密码
  • Java通过JNI调用C语言的办法
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .