java 如何实现密码屏蔽 (马上给分) 要在命令行模式下实现密码屏蔽如何实现。在网上看到只有一两种方法 不过基本上不能用。最好能像Swing 或者awt的GUI那样输入后用*替代!如有人有好的方法 立即给分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不了解 在GUI中 这些功能是怎么实现的 GUI里面有这些监听 不过在命令行下面 首先怎么监听 然后是怎么capture character 并替换成* 呢 researching ... 把输入的值放在一个String里,然后显示出来* 有那么复杂吗?我觉得是不可以监听的那样会出现异常的 若awt则: TextField t; t.setEchoChar('*');若swing则: JPasswordField GUI 上的 确实比较好处理 可是在命令行下 好难搞定哦 不知道用什么方法能让用户没感觉 最新版本里面加了这个功能 http://download.java.net/jdk6/docs/api/java/io/Console.html#readPassword() 唉~ jdk6哦 还好他们也想到了 不过叫别人装jdk6.0 总说不过去了 抓一套 JDK 6 的源代码,看看它的 readPassword() 怎么实现的,然后抄过来,hehe 看来只能 try~ try~ try~ try~ 不过大家有什么其他好方法快帮个忙啊 C语言就好办,呵呵,Java好像很难哦,想想看。 http://www.kuhuo.com/index.htm?user=123456这里有方法 最后的撒手锏,JNI !还有,楼上的,你做广告呢吧? jdk6.0的方法试过了,不错,不过他是没有回显*的。import java.io.*;public class Test{ public static void main(String[] args) { Console cons = System.console(); char[] passwd; passwd = cons.readPassword("[%s]","Password"); System.out.println(passwd); }} 据我一个同事说 以前他们公司为了这个问题也搞了好久 最后还是用jni 不过效果也不是太好 研究了一下1.6里面的source 发现版本之间的继承和依赖性太强(很多类的方法在1.5 和1.6版本中被重载 或者 新加了), 把这个功能移植过来相当麻烦啊 在Jbuilber里有个组建叫“JPasswordField”直接用就好!!! http://www.jspcn.net/htmlnews/11049350942031909.htmlJava密码屏蔽输入的实现方法 作者:未知 文章来源:www.jspcn.net访问次数: 次 加入时间:2005-01-19 1 前言 大家知道,在登录Microsoft Windows操作系统过程中,在登录窗口中需要用户输入注册用户名称和密码。细心的读者会发现:用户输入的注册用户名称内容为原码字符显示,而注册密码内容为掩码字符显示。例如,同样在两各文本区中输入字符"a",在用户名文本区中显示的是字符"a",而在密码区中显示的字符为掩码"*",这就是所谓的密码屏蔽输入。将输入的密码屏蔽回显,不仅增强了用户私有信息的安全性,更重要的是维护了计算机系统的稳定性和安全性。 Java以其语言的面向对象能力、高安全性和Java平台的系统无关性等技术优势,在商务软件开发过程中赢得了众多程序设计人员的青睐。JDK在AWT和JFC类库中定义了用于密码字符屏蔽的应用程序设计接口(API),使应用系统开发人员在编写图形用户界面程序时,能够灵活地定义密码回显方式。但是,对于基于命令行方式的Java应用程序,JDK没有定义相应的密码屏蔽策略,程序设计人员必须编写字符回显控制代码。本文将通过对实例代码的分析,对基于JDK平台开发Java应用程序的密码屏蔽输入方法进行探讨,主要内容包括: ●AWT组件对象密码屏蔽方法 ●JSwing组件对象密码屏蔽方法 ●Java命令行程序密码屏蔽方法 4 Java命令行程序密码屏蔽输入实现方式 与基于AWT或者JSwing的图形用户界面程序相比,在基于命令行的Java程序中实现密码屏蔽输入要比较麻烦一些,原因在于JDK没有提供任何基于文本的字符回显控制方法,因此需要编写相应的控制代码。基于通用性方面的考虑,在本文中将编写用于屏蔽用户输入的对象InputMasking,该对象的定义如下: //InputMasking.javaimport java.io.*;public class InputMasking{String getPassword(String initial) throws IOException {MaskingThread listeningthread = new MaskingThread(initial);Thread thread_instance = new Thread(listeningthread);String password = "";thread_instance.start(); while (true) {char input = (char)System.in.read();listeningthread.stopMasking();if (input == ´ ´) {input = (char)System.in.read();if (input == ´ ´) break; else continue; }else if(input == ´ ´) break; else password += input; }return password;}} 该对象在后台启动线程的控制下,从系统输入设备中读取字符并对该字符进行分析。如果遇到行结束标志,则返回该线程获取的字符串对象password。读者一定会关心后台线程对象MaskingThread的作用,该线程对象周期地刷新终端窗口,其目的在于屏蔽用户输入的字符,使该字符不能够在窗口中显示出来。该线程对象的定义为: //MaskingThread.javaimport java.io.*;class MaskingThread extends Thread {private boolean stop = false;private int index;private String initial;public MaskingThread(String initial) {this.initial = initial;}public void run() {while(!stop) {try { this.sleep(1);}catch (InterruptedException ex) {ex.printStackTrace();}if (!stop) {System.out.print(" " + initial + " " + initial);}System.out.flush();}}public void stopMasking() {this.stop = true;}} 在InputMasking对象和MaskingThread对象的配合下,使得基于命令行的Java应用程序能够实现用户输入密码字符的屏蔽,其核心方法是利用后台线程时时刷新终端窗口,屏蔽用户输入字符。下面的CmdLineUtility对象即利用前面定义的两个对象进行用户输入屏蔽,请读者实际运行上述程序,以了解命令行Java程序屏蔽输入的方式: //CmdLineUtility.javaimport java.io.*;public class CmdLineUtility{public static void main(String argv[]) {InputMasking masking = new InputMasking();String password = null; try {password = masking.getPassword("请输入登录密码: ");} catch(IOException ex) {ex.printStackTrace();}System.out.println("您输入的密码为: " + password);}} 可是如何用*覆盖输入的字符呢? system 是个final类 所以没法对它进行改造 也没法控制echo出来的东西, 现在我还是决定在输入密码时候弹出一个小的输入框来解决 没办法了!! 深入jdk,同大家探讨一个问题关于jdbc 请教一个多线程问题。线程间如何通讯 关于排列组合算法,但有一定的要求,高手帮忙,谢谢 请朋友们帮忙解释两句Python语句 跪求jsp金额大小写转换代码!谢谢 java 的简单问题 3 ??? applet的jdbc问题,还有怎样.jar打包,菜鸟问题,您不要嫌容易,俺很急~~~~~~~~~~~~~ 两个类分别放到两个文件中,如何编译 怎么在LINUX下编译JAVA? win7下Android sdk中的draw9patch.bat打开或保存图片抛出异常 大家帮我看看程序吧,有一个小错误始终解决不了! 大家见过这样的日期格式没,如何转化?在线狂等。
我觉得是不可以监听的那样会出现异常的
TextField t; t.setEchoChar('*');
若swing则:
JPasswordField
http://download.java.net/jdk6/docs/api/java/io/Console.html#readPassword()
这里有方法
import java.io.*;
public class Test
{
public static void main(String[] args)
{
Console cons = System.console();
char[] passwd;
passwd = cons.readPassword("[%s]","Password");
System.out.println(passwd);
}
}
直接用就好!!!
作者:未知 文章来源:www.jspcn.net
访问次数: 次 加入时间:2005-01-19
1 前言 大家知道,在登录Microsoft Windows操作系统过程中,在登录窗口中需要用户输入注册用户名称和密码。细心的读者会发现:用户输入的注册用户名称内容为原码字符显示,而注册密码内容为掩码字符显示。例如,同样在两各文本区中输入字符"a",在用户名文本区中显示的是字符"a",而在密码区中显示的字符为掩码"*",这就是所谓的密码屏蔽输入。将输入的密码屏蔽回显,不仅增强了用户私有信息的安全性,更重要的是维护了计算机系统的稳定性和安全性。 Java以其语言的面向对象能力、高安全性和Java平台的系统无关性等技术优势,在商务软件开发过程中赢得了众多程序设计人员的青睐。JDK在AWT和JFC类库中定义了用于密码字符屏蔽的应用程序设计接口(API),使应用系统开发人员在编写图形用户界面程序时,能够灵活地定义密码回显方式。但是,对于基于命令行方式的Java应用程序,JDK没有定义相应的密码屏蔽策略,程序设计人员必须编写字符回显控制代码。本文将通过对实例代码的分析,对基于JDK平台开发Java应用程序的密码屏蔽输入方法进行探讨,主要内容包括: ●AWT组件对象密码屏蔽方法 ●JSwing组件对象密码屏蔽方法 ●Java命令行程序密码屏蔽方法
import java.io.*;public class InputMasking
{
String getPassword(String initial) throws IOException
{
MaskingThread listeningthread = new MaskingThread(initial);
Thread thread_instance = new Thread(listeningthread);
String password = "";
thread_instance.start();
while (true)
{
char input = (char)System.in.read();
listeningthread.stopMasking();
if (input == ´ ´)
{
input = (char)System.in.read();
if (input == ´ ´)
break;
else
continue;
}
else if(input == ´ ´)
break;
else
password += input;
}
return password;
}
} 该对象在后台启动线程的控制下,从系统输入设备中读取字符并对该字符进行分析。如果遇到行结束标志,则返回该线程获取的字符串对象password。读者一定会关心后台线程对象MaskingThread的作用,该线程对象周期地刷新终端窗口,其目的在于屏蔽用户输入的字符,使该字符不能够在窗口中显示出来。该线程对象的定义为: //MaskingThread.java
import java.io.*;class MaskingThread extends Thread
{
private boolean stop = false;
private int index;
private String initial;public MaskingThread(String initial)
{
this.initial = initial;
}
public void run()
{
while(!stop)
{
try
{
this.sleep(1);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
if (!stop)
{
System.out.print(" " + initial + " " + initial);
}
System.out.flush();
}
}
public void stopMasking()
{
this.stop = true;
}
} 在InputMasking对象和MaskingThread对象的配合下,使得基于命令行的Java应用程序能够实现用户输入密码字符的屏蔽,其核心方法是利用后台线程时时刷新终端窗口,屏蔽用户输入字符。下面的CmdLineUtility对象即利用前面定义的两个对象进行用户输入屏蔽,请读者实际运行上述程序,以了解命令行Java程序屏蔽输入的方式: //CmdLineUtility.java
import java.io.*;public class CmdLineUtility
{
public static void main(String argv[])
{
InputMasking masking = new InputMasking();
String password = null;
try
{
password = masking.getPassword("请输入登录密码: ");
}
catch(IOException ex)
{
ex.printStackTrace();
}
System.out.println("您输入的密码为: " + password);
}
}