|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开
比来看到一个成绩,怎样用Java完成从把持台输出暗码?
原本觉得是很复杂的成绩,查了一下发明Java竟然没供应如许一个办法。今朝完成的体例有2个,一个是使用JNI来挪用C/C++办法,另外一个是利用多线程。
上面是利用JNI的办法:
起首,写出我们的Java类:
publicclassJNIPasswordReader{
privatenativeStringreadPassword();
static{
System.loadLibrary("PasswordDLL");
}
/***//**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
JNIPasswordReaderreader=newJNIPasswordReader();
Stringpwd=reader.readPassword();
System.out.println("
YourPasswordis:"+pwd);
}
}
这一段利用System.loadLiberary("..");来加载当地类库,PasswordDLL是文件名,不必要加dll后缀,体系会主动识别。
编译成JNIPasswordReader.class今后,利用
javah-jniJNIPasswordReader
命令,天生一个JNIPasswordReader.h文件,文件内容以下:
/**//*DONOTEDITTHISFILE-itismachinegenerated*/
#include<jni.h>
/**//*HeaderforclassJNIPasswordReader*/
#ifndef_Included_JNIPasswordReader
#define_Included_JNIPasswordReader
#ifdef__cplusplus
extern"C"{
#endif
/**//*
*Class:JNIPasswordReader
*Method:readPassword
*Signature:()Ljava/lang/String;
*/
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword
(JNIEnv*,jobject);#ifdef__cplusplus
}
#endif
#endif
然后,我们必要写一个cpp文件来完成
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword(JNIEnv*,jobject);
接口。
因而,我写了一个PasswordDLL.cpp文件,内容以下:
//这是主DLL文件。
#include"stdafx.h"
#include"JNIPasswordReader.h"
#include<iostream>
#include<iomanip>
#include<conio.h>
usingnamespacestd;/**//*
*Class:JNIPasswordReader
*Method:readPassword
*Signature:()V
*/
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword
(JNIEnv*env,jobject){
charstr[20]={0};
jstringjstr;
charch;
char*pstr=str;
while(true)
{
ch=getch();
if(isdigit(ch)||isalpha(ch))
{
cout<<"*";
*pstr++=ch;
}
elseif(ch==&&pstr>str)
{
*(--pstr)=0;
cout<<"";
}
elseif(ch==0x0A||ch==0x0D)
{
break;
}
}
jstr=env->NewStringUTF(str);
returnjstr;
我利用VS2005来天生对应的dll文件,在天生之前,必要把$JDK_HOME/include/jni.h和$JDK_HOME/include/win32/jni_md.h这两个文件copy到MicrosoftVisioStudio8/VC/include目次下,我就在这里卡了也许1个小时,一向说找不到jni.h文件然后就能够利用VS2005来天生dll了,天生好对应的PasswordDLL.dll今后,把该dll文件放到体系变量PATH能找到的中央,好比windows/system32/大概jdk/bin目次,我是放到JDK_HOME/bin上面了
放好今后,
实行javaJNIPasswordReader
就能够输出暗码了。
关于JNI的更具体内容,能够参考:
《在Windows中完成Java当地办法》http://www.ckuyun.com/developerworks/cn/java/jnimthds/index.html
我的Password.dll文件
http://www.blogjava.net/Files/richardeee/PasswordDLL.zip
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。 |
|