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

JNI 在命令行窗口输入字符,不显所输入字符,显指定的掩饰符的更多相关文章

  1. 在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法

    有时候只是简单的为了测试某个php函数的效果,以前总是需要建一个php文件,复制这个文件的路径,再通过web访问或者用php命令执行这个php文件. 一直想要怎么才能不用创建文件,才能直接执行PHP代 ...

  2. plsql命令行窗口执行脚本打印输出

    1.我们可以写一些简单的检查数据库的检查脚本 prompt Importing table t_test0... set feedback off set define off ; ; prompt ...

  3. 解决PowerShell命令行窗口中不显示光标的问题

    不知道什么原因,在有些系统上打开PowerShell命令行窗口后,光标无法显示.这种情况在Windows Server 2008/2012.Windows 8/9/10上都出现过,估计是由于某些系统软 ...

  4. 在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字

    在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是c ...

  5. MySQL 遇到的问题:在服务里找不到自己的 MySQL,以及在命令行窗口中运行服务出现的问题。

    1.用数据库的时候在服务里找不到自己的 MySQL ,于是就想用命令行窗口去运行. ①.在开始里,键入 cmd ,打开命令行窗口. ②.输入:mysql -u root -p 回车,这时会提示请输入密 ...

  6. C#中隐式操作CMD命令行窗口

    原文:C#中隐式操作CMD命令行窗口 MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成CMD窗口的功能,那一定 ...

  7. 在windows命令行窗口下执行:查看所有的端口占用情况

    开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...

  8. 命令行窗口中用telnet测试HTTP协议

    1. 命令行窗口中用telnet测试HTTP协议 HTTP消息是由普通ASCII文本组成.消息包括消息头和数据体部分.消息头以行为单位,每行以CRLF(回车和换行)结束,消息头结束后,额外增加一个CR ...

  9. 使用cmd命令行窗口操作SqlServer

    本文主要介绍使用windows下的使用cmd命令行窗口操作Sqlserver, 首先我们可以运行 osql  ?/   ,这样就把所有可以通过CMD命令行操作sqlserver的命令显示出来 (有图有 ...

随机推荐

  1. Windows上编译libtiff

    将libtiff 4.0.3解压到[工作目录]/tiff/tiff-4.0.3 对于Release,编辑tiff/tiff-4.0.3里面的nmake.opt如下选项,去掉注释: JPEG_SUPPO ...

  2. 《CWNA官方学习指南(第3版):认证无线网络管理员PW0-105》

    <CWNA官方学习指南(第3版):认证无线网络管理员PW0-105> 基本信息 原书名:CWNA: Certified Wireless Network Administrator Off ...

  3. python的内存回收机制即gc模块讲解

    最后容易造成内存问题的通常就是全局单例.全局缓存.长期存活的对象 引用计数(主要), 标记清除, 分代收集(辅助) 引用计数为0则会被gc回收.标记删除可以解决循环引用的问题.分代:0代--年轻代:1 ...

  4. 【BZOJ】【2286】【SDOI2011】消耗战

    虚树+树形DP Orz ZYF……果然好神…… 建虚树先按dfn排序,再用一个单调栈来维护当前这条[链],往里加边……说实话还没弄懂- - 留个坑吧…… RE的原因:这条链往出退的时候没写top--; ...

  5. 用java解析在OpenStreetMap上下载的地图数据(SAX版,适合比较大的xml文件)

    java程序如下: package gao.map.preprocess; import java.io.BufferedWriter; import java.io.File; import jav ...

  6. Java操作Mongodb 保存/读取java对象到/从mongodb

    从http://central.maven.org/maven2/org/mongodb/mongo-java-driver/选择一个版本进行下载,这里选择的是3.0.0版本,具体下载以下jar包: ...

  7. 使用ADB管理Andorid系统软件

    # Usageadb shell pm list packages -fadb shell pm list packages -eadb shell pm list packages -dadb sh ...

  8. iOS开发-数据选择UIPickerView

    UIPickerView开发一般选择区域或者分级数据的时候会使用到,类似于前端中用到树状结构,不过PC上一般都是从上到下的分级,使用UIPickView是从左到右实现,可以动态的设置UIPickVie ...

  9. 原生js获取宽高与jquery获取宽高的方法的关系

    说明:1.因为获取高度的情况跟获取宽度的情况一样,所以以下只说获取宽度的情况.  2.以下所说的所有方法与属性所返回的值都是不带单位的.  3.为了方便说明,以下情况采用缩写表示:  obj -> ...

  10. Android -- SDcard文件读取和保存

    背景                                                                                            一些东西可以 ...