2014-12-01 63 views
0

我編寫了一個程序來屏蔽用戶在命令行中輸入的輸入。 詳細信息: 當我的程序啓動時,我運行一個新線程,通過System.out.print(「\ 010 *」)每毫秒打印一個星號。 同時我的主要方法通過read.nextLine()讀入用戶輸入。當我在eclipse中運行這個程序時,輸出是星號溢出(這是我所期望的)。 但是,當我從終端運行此程序時,只有在鍵入字符時纔會看到星號。IDE輸出與命令行不同

這是爲什麼?我閱讀了一些其他文章,說CPU如何將6-10%的內存分配給命令行,而典型的IDE獲得了兩倍以上的內存。

我的代碼如下所示僅供參考:

import java.util.Scanner; 

public class Main { 

    public static void main(String [] args){ 

    PasswordMasker passwordMasker = new PasswordMasker(); 
    passwordMasker.start(); 

    Scanner scan = new Scanner(System.in); 
    String password = scan.nextLine(); 

    passwordMasker.stopMasking(); 

    System.out.println("The password is: " + password); 

    } 
} 



public class PasswordMasker extends Thread { 

private boolean maskInProgress = true; 

    public void run(){ 
     mask(); 
    } 

    private void mask() { 
     while(maskInProgress){ 
     try { 
      Thread.sleep(1); 
      System.out.print("\010*"); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     } 
     System.out.println("Masking stopped"); 
    } 

    public void stopMasking(){ 
     this.maskInProgress = false; 
    } 
} 
+0

你在用什麼IDE?在什麼操作系統上?我剛剛在Windows下使用Eclipse編譯了代碼,並且在延遲到100ms後減緩延遲並刪除「\ 010」,它在IDE和DOS命令提示符下均可正常工作。 – Greycon 2014-12-01 18:33:15

回答

1

由於Eclipse控制檯不能顯示退格字符(\ B或\ 010),因爲錯誤的 https://bugs.eclipse.org/bugs/show_bug.cgi?id=76936

在CMD可以顯示它,這就是爲什麼你的程序按照預期在cmd中工作。

但是,根據錯誤報告,該修復將在Eclipse 4.5 M4中提供。