亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于DOS 下用JAVA來接收輸入的話可以中斷嗎????

關于DOS 下用JAVA來接收輸入的話可以中斷嗎????

慕姐4208626 2023-03-18 14:10:59
用Java語言實現在dos環境下接受用戶輸入密碼,用*號來顯示.記住了,一定要用*號顯示,不可以不顯示!如果實在不行,可否可點其它解決方案.DOS下可以監聽鍵盤嗎!!!!!!????????還有就是希望用具體代碼來說話.DOS 下用JAVA來接收輸入的話可以中斷嗎????如何控制輸入一個字符時,顯示*號.String str=null;//定義個接受輸入標準輸入 BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in)); //這里接收輸入,可以中斷??try {str=stdIn.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
查看完整描述

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文件依次編譯,運行最后一個就是


查看完整回答
反對 回復 2023-03-21
?
暮色呼如

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 程序。

 


查看完整回答
反對 回復 2023-03-21
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號