`
easonfans
  • 浏览: 254170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk6:System.console()简介

阅读更多

最近再考SCJP的认证,看得资料是055的,想考065,结果在做试题的时候发现了一些新东西。是jdk6的新增东西,原题如下:

Given:
import java.io.Console;
public class TestThis implements Runnable {
	public static void main(String[] args) {
		Thread t=new Thread(new TestThis());
		t.start();
		Thread t2=new Thread(new TestThis());
		t2.start();
		Console c=System.console();
		String u=c.readLine("%s","m ");
		System.out.print(u+"");
	}
	public void run() {
		Console c=System.console();
		Console c=System.console();
		String u=c.readLine("%s","t ");
		System.out.print(u+"");
	}
}

What is the result?(Choose all that apply)
A:Compilation fails.
B:A NullPointerException is never thrown.
C:A NullPointerException is always thrown.
D:A NullPointerException is sometimes thrown.

 

其中的原因是控制台对象并不是每次都能分配得的到的,视具体的环境而定。

下面是转载的资料(http://developer.51cto.com/art/200907/135170.htm),看一下就明白了:

JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备。如果你的Java程序要与Windows下的cmd或者Linux下的Terminal交互,就可以用这个Java Console类代劳。

TestConsole.java 代码:

package com.simon.testjdk6.console;    
import java.io.Console;           
public class TestConsole {             
  /**          * @param args          */     
    public static void main(String[] args) {         
         Console console = System.console(); // 获得Console实例对象             
      if (console != null) { // 判断是否有控制台的使用权                  
          String user = new String(console.readLine("Enter username:"));// 读取整行字符                  
          String pwd = new String(console.readPassword("Enter passowrd:"));   // 读取密码,输入时不显示   
          console.printf("Username is: " + user + "\n");// 显示用户名                  
          console.printf("Password is: " + pwd + "\n");   // 显示密码     
      } else {     
                 System.out.println("Console is unavailable.");  // 提示无控制台使用权限            
      }            
   }        
}     

Java要与Console进行交互,不总是能得到可用的Java Console类的。一个JVM是否有可用的Console,依赖于底层平台和JVM如何被调用。如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就我们可以得到一个可用的Console实例。

当你有Eclipse或NetBean中运行以上代码时Console中将会有以下文字输出:

Console is unavailable.

 表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。

在控制台中运行代码,效果将如下所示:

 

 

$ java com.simon.testjdk6.console.TestConsole 
Enter user:Simon  
Enter passowrd:  
User is:Simon  
Password is:12345 

我们可以看到:输入密码时,控制台时不显示我们所输入的密码字符。但是程序可以得到并输出的密码字符串。这就是JDK 6中新增的Java Console类的运行方式。

或者在这里也会看到相关资料:http://wangyu.iteye.com/blog/193466

0
0
分享到:
评论
1 楼 gzyyygyf 2010-06-30  
谢谢分享,都很不错哈 

相关推荐

    Java JDK 6学习笔记——ppt简体版 第21章.ppt

    "Java JDK 6学习笔记——ppt简体版 第21章.ppt" 是一份关于Java Standard Edition 6(Java SE 6)新特性的讲解资料。在这个章节中,主要介绍了几个重要的更新,包括字符串处理、数组操作、日期与时间的国际化、以及...

    JAVA中JDK命令大全

    Java程序中的输出可以通过System.out.println()等方法在控制台(console)中显示。 2、javac.exe: javac.exe是Java的编译器,它的作用是将源代码文件(.java)转换为字节码文件(.class)。例如,`javac YourClass....

    java学习笔记JDK6课件之二十一(完整结束,全篇)

    - **Console.readLine()和readPassword()方法**:这两个方法分别用于读取用户输入的可见文本(如名称)和隐藏文本(如密码),增强了命令行交互的安全性。 这些Java SE6的新特性大大提高了开发效率,特别是对于...

    java英语练习题

    ##### 题目6: The main method header is written as: - **选项**: - 1. public static void main(string[] args) - 2. public static void Main(String[] args) - 3. public static void main(String[] args) -...

    Java控制台数据获取方法及比较.pdf

    String str = console.readLine("%s"); System.out.println("Console 方法的输入:" + str); } } ``` 这种方法的优点是可以读取整行的数据,并且可以读取密码等敏感信息。 比较 三种方法各有其优缺点。System....

    Java控制台数据获取方法及比较

    char[] password = console.readPassword(); System.out.println("读取的用户名:" + username); System.out.println("读取的密码:".concat(new String(password))); } else { System.err.println("Console ...

    Java中从控制台读取输入的方法.docx

    在上述代码中,`console.readLine()` 用于读取文本,而 `console.readPassword()` 则用于读取密码,不会显示用户输入的字符。 总结来说,Java 中从控制台读取输入的方法有多种选择,可以根据具体需求和环境选择合适...

    Java中的BoneCP数据库连接池用法.doc

    log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ...

    Actuate--administering-iserver-system.pdf

    6. **Management Console**:一个基于 Web 的管理界面,允许管理员监控和配置 iServer 的各项设置。 #### 三、Actuate iServer 安装与配置 在安装 Actuate iServer 前,需要准备以下环境: - 操作系统:支持 ...

    l​i​n​u​x​在​S​e​c​u​r​e​C​R​T​下​如​何​配​置​j​d​k

    log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d- %c -%-4r [%t] %-5p %c %x - %m%n ``...

    ebayAPI 

    System.out.print("+ - ConsoleAddItem +\n"); System.out.print("+++++++++++++++++++++++++++++++++++++++\n"); // ... } catch (IOException e) { ConsoleUtil.println("IOException occurred: " + e....

    Java如何从掌握台中读取数据_.docx

    String str = console.readLine("请输入字符串:"); System.out.println("readLine 方法的输入:" + str); } } } Console 类的 readLine() 方法与 Scanner.nextLine() 类似,都可以读取控制台的一行文本。...

    tomcat排错经典案例之404.docx

    log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=${catalina.home}/logs/...

    java学习笔记JDK6课件之十五

    Java线程是多任务编程的核心概念,特别是在JDK 6中,线程的使用对于理解和开发高效的并发应用程序至关重要。本章主要介绍了Java中创建和管理线程的两种主要方式:继承`java.lang.Thread`类和实现`java.lang.Runnable...

    java的数据输入:从控制台输入数据.pdf

    然而,`Console`对象不是始终可用的,只有当应用程序在控制台上运行时,才能通过`System.console()`获取到。 总的来说,从控制台输入数据是Java程序与用户交互的基本手段。开发者可以根据实际需求选择使用标准输入...

    JAVA程序设计实验指导书全册.pdf

    调试下面程序,指出错误 public Class HelloWorldApp { public void static main(string[] args) { system.out.println(“ HelloWorld! ” );} 2. 写出调试过程编译和执行的具体命令 * 知识点: + J2SDK 的安装和...

    linux 下jdk ,jboss的安装和jboss的自启动.txt

    System.out.println("JDK安装成功!"); } } ``` 2. 编译Java程序: ```bash javac Test.java ``` 3. 运行Java程序: ```bash java Test ``` 4. 如果看到输出“JDK安装成功!”,则表示JDK已成功安装。 ...

    java的数据输入:从控制台输入数据分享.pdf

    Console类的获取需要通过System.console()方法,但这个方法在没有控制台的情况下会返回null。因此,这种方法通常只适用于命令行环境,而不是自动启动的后台程序。 在使用控制台输入时,需要注意以下几点: - 当从...

Global site tag (gtag.js) - Google Analytics