2 回答

TA貢獻1998條經驗 獲得超6個贊
dos的控制臺程序沒試過有沒有密碼的
可以給你一個方案 你輸入的時候print("*")
按一個鍵print("*")一次
然后接收輸入的時候你不打印出來 而是保存成一個string
等你調用密碼的時候就調用這個string就可以了...
-------------------------------------
仔細研究了下 是沒這么簡單,要用線程來監聽 查了些資料 給你代碼
//InputMasking.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 == '\r')
{
input = (char)System.in.read();
if (input == '\n')
break;
else
continue;
}
else if(input == '\n')
break;
else
password += input;
}
return password;
}
}
//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("\r" + initial + " \r" + initial);
}
System.out.flush();
}
}
public void stopMasking()
{
this.stop = true;
}
}
//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);
}
}
這三個JAVA文件依次編譯,運行最后一個就是

TA貢獻1853條經驗 獲得超9個贊
System.out.print("*");
System.in //接受鍵盤輸入
//接受一個按鍵 打印 一個 * 只是接受 按鍵
像Oracle 輸入密碼一樣!!
監聽 鍵盤就可以了
不過 你必須到 dos下面 編譯 java文件
如果你是用編程工具的話 他會把 dos 環境改為
自己的環境
補充: 沒有awt 或者 swing 等空間
是沒有 監聽 鍵盤的功能
方法 編譯文件的時候生成控件 再隱藏進行監聽
不過這樣 可能被認為是毒
所以建議
JAVA里調用了C語言的getch()方法
就能實現 得到鍵盤值的功能
再次補充:
要實現你所說的功能就必須有一個從標準輸入讀取數據時不做任何緩存的方法,
即讀取一個字節后馬上返回的方法(比如視窗平臺上 C/C++ 頭文件 conio.h 里聲明的 getch( ) )。
可惜的是,到目前為止,Java 里沒有這種方法。
就連返回一個字節的 System.in.read( ) 也要等到碰上回車才返回(行緩存,即 line-buffered)。
所以現在你唯一的選擇就是通過本機接口(JNI)調用本機方法(native method)。
步驟有 6 個。以下是裝有 VC6 的視窗平臺上的實現范例:
1)編寫我們的 Java 程序。在程序里,以 native 這個關鍵字為將被調用的本機方法做本機聲明,
并且加載我們將在第 5 步里創建的動態連接庫:
public class PressAnyKeyToContinue {
static native void pause( ); // 本機聲明
public static void main( String[ ] args ) {
System.loadLibrary( "PressAnyKeyToContinue" ); // 加載我們的動態連接庫
pause( ); // 調用本機方法跟調用一般的方法沒兩樣
}
}
2)編譯我們的 Java 程序,以便生成類文件。
3)用 javah.exe 生成對應的 C/C++ 頭文件(PressAnyKeyToContinue.h):命令是 javah PressAnyKeyToContinue 。
4)實現頭文件里聲明的所有方法 / 函數(這例子用 C,所以以下的代碼是在 PressAnyKeyToContinue.c 里):
#include "PressAnyKeyToContinue.h"
JNIEXPORT void JNICALL Java_PressAnyKeyToContinue_pause( JNIEnv * jenv, jclass jc ) {
system( "pause" );
}
5)用編譯器生成動態連接庫:
命令是 cl -Ic:\jdk2\include -Ic:\jdk2\include\win32 -LD PressAnyKeyToContinue.c 。
(當然,假設了 c:\jdk2\ 是 JDK 的路徑。)
6)運行我們的 Java 程序。
添加回答
舉報