`
easonfans
  • 浏览: 251234 次
  • 性别: 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  
谢谢分享,都很不错哈 

相关推荐

    打开Intellij Idea 2020.1 提示 cannot load a jdk class: com.sun.jdi.Field

     IDEA_JDK_64=C:\Program Files\Java\jdk1.8.0_144 修改后 IDEA_JDK_64=C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr (我的是有2019.3升级到2020.1的,) 转 ...

    jdk:tools:1.8

    java8的tools包,在maven出现无法加载时可以将该包加入maven本地仓库即可解决问题

    jdk.tools-1.8.jar

    maven 加载不了 jdktool的 可以直接下在相应的jar,在maven路径下配置好,改好名字,重新更新maven

    JAVA JDK1.6的tools.jar

    网上找了很久,干脆下载个1.6的JDK

    aspose-words-jdk16-14.9.0.7z

    aspose-words-jdk16-14.9.0 maven仓库没有的版本,需要手动添加到仓库,附上命令:install:install-file -Dfile="H:\\14.9.0\\aspose-words-jdk16-14.9.0.jar" -DgroupId=...

    jdk.tools-1.7.jar

    jdk.tools-1.7.jar,解压后放到安装目录下的jdk目录下的lib下面即可。

    mapstruct-jdk8-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    bcprov-jdk16-143.jar和bcprov-jdk15-135.jar

    在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider 在\jre\lib\ext中...

    JDK1.8下载 : jdk_8.0.1310.11_64.zip

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...

    mapstruct-jdk8-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    JDK——1.8的tools.jar 包

    JDK——1.8的tools.jar 包,.

    jdk 1.5:1.6:1.7.zip

    上传文件大小有限制,分开发了。该资源整合了jdk-1.5.02、jdk-1.6.45、jdk-1.7.80的rpm安装包。

    Tomcat启动时报错:java.lang.UnsatisfiedLinkError的解决

    由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境用的jdk1.7改为了本机安装的jdk1.8就不在报错。 具体过程: 在myeclipse中点击window→preference→在搜索框中...

    jdk1.6.0_191.linux.x64.tar.gz

    Java 6 u191 linux x64版本,亲测可用。 解压后使用方法:(不执行下面两步,运行java -version会报下面的错误,解压命令:tar xvzf jdk1.6.0_191.linux.x64.tar.gz) # Error occurred during initialization of VM ...

    bcprov-jdk15-133.jar

    bcprov-jdk15-133.jar bcprov-jdk15-133.jar

    bcprov-jdk16-1.45.jar.zip

    如下:首先在jdk包中 编辑jdk1.8_014\jre\lib\security\java.security 文件 增加这行 security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider 其次,把bcprov-jdk16-1.45.jar添加到到 jre\...

    微信小程序解压包(bcprov-jdk16-143.jar,bcprov-jdk15-135.jar).rar

    解决no such provider: BC 问题所需的JAR 在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider....

    jdk1.8.0_181.tar.gz

    jdk1.8.0_181.tar.gz

    bcprov-jdk14-1.38-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk14-1.38.jar; 赠送原API文档:bcprov-jdk14-1.38-javadoc.jar; 赠送源代码:bcprov-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk14-1.38.pom; 包含翻译后的API文档:bcprov...

    bcprov-jdk15-135.jar

    在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider 在\jre\lib\ext中...

Global site tag (gtag.js) - Google Analytics