2011-03-11 23 views
1

我正嘗試在java中使用控制檯類。與此代碼Java中的控制檯類讀取密碼的例外

import java.io.Console; 
public class ConsoleClass { 
public static void main(String[] args){ 
    Console c=System.console(); 
    char[] pw; 
    pw=c.readPassword("%s","pw :"); 
    for(char ch:pw){ 
     c.format("%c",ch); 
    } 
    c.format("\n"); 
    MyUtility mu =new MyUtility(); 
    while(true){ 
     String name=c.readLine("%s", "input?: "); 
     c.format("output: %s \n",mu.doStuff(name)); 

    } 

    } 
} 
class MyUtility{ 
String doStuff(String arg1){ 
    return "result is " +arg1; 
} 
} 

這裏我得到的NullPointerException當我試圖在NetBeans中運行,但試圖與出的NetBeans IDE.Why CMD運行時我沒有得到任何的異常?

+0

你會得到一個堆棧跟蹤指示哪一行導致空指針異常? – 2011-03-11 16:09:17

+0

如果沒有控制檯,System.console()將返回null。看到這裏:http://illegalargumentexception.blogspot.com/2010/09/java-systemconsole-ides-and-testing.html – McDowell 2011-03-11 16:10:23

+0

@Michael McGowan我在pw = c.readPassword(「%s」,「pw: 「); – satheesh 2011-03-11 16:21:08

回答

1

控制檯通常與獨立框架運行的進程相關聯。它們是將進程的標準輸入和輸出與外殼進行接口的一種手段。如果你的類作爲一個更大框架的組件運行,那麼框架可能擁有控制檯,而你的程序可能根本沒有控制檯。

還有其他條件和技術可以在沒有控制檯的情況下啓動程序。通常在保證控制檯銷燬的情況下使用它們,但是您希望程序以控制檯銷燬不會發出程序終止信號的方式分離。

因此,您不能保證控制檯的存在;但是,如果要在可能存在控制檯的環境中運行程序,則應該利用它。

4

static Console console() Returns the unique Console object associated with the current Java virtual machine, if any.

(如有)。

http://download.oracle.com/javase/6/docs/api/java/lang/System.html

+0

我明白了爲什麼它會返回NUllPointerException。但我懷疑爲什麼這個控制檯類是在java 6中引入的,因爲有這麼多的選擇 – satheesh 2011-03-11 16:30:19

+0

@satheesh - 控制檯類是提供控制檯交互(如果存在的話)的好方法,比使用System.out和包裝系統要好得多.in在InputStreamReader中,而不是在BufferedReader中。不,Java並不總是能夠保證一個控制檯會到位,但是如果你只是將你的應用程序部署到一個存在控制檯的環境中,那麼使用這個類會有很大的意義。 – berry120 2011-03-11 16:43:12