java prompt是什么?var str=prompt 是什么意思啊
大家好,关于java prompt是什么很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于var str=prompt 是什么意思啊的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
var str=prompt 是什么意思啊
java语句
var是定义一个变量用的,这里就定义了str这个变量;
=是赋值符号,将后面prompt的值赋予变量str;
prompt是一个内置函数,用它可以调出资料框,让用户输入相关信息,而这些输入的信息就代表了它当前的值;
所以,上面的整个语句就有了下面的功能:
1,定义了一个变量,以供后面的语句调用。
2,实现了变量的用户自定义。即它不是一个固定值,也不是由某种算法来赋予,而是靠用户输入的。
java弹出警告框代码
在你的java文件中写入:
比如说考试规则:里面写入想要写的内容,
JOptionPane.showMessageDialog(menuFrame,"\n 1:规定时间内完成答题\n 2:不定项选择每道题5分,答不全0分\n"+
"3:考试结束方可出考场,否则0分处理\n\n","考试规则", JOptionPane.PLAIN_MESSAGE);
注意:PLAIN_MESSAGE是不带警告那个标志符号的!
WARNING_MESSAGE带警告标志
ERROR_MESSAGE错误提示
。。。。。等等好多呢。。
是不是你所要的回答?
不是可以再追问哈。。?
Java 编程语言中的口令屏蔽
目前对于 Java命令行基于文本的输入/输出 API的批评之一就是它缺乏对命令行输入口令屏蔽的支持如果借助 AWT/Swing这便不再成为问题因为 AWT/Swing提供了可以提供屏蔽口令的方法
年月我发表了本文的早期版本其后便不断收到大量感谢信建设性的意见和在应用程序中使用源代码的许可本文
概述了口令屏蔽描述了用于口令屏蔽的 AWT/Swing实用程序为命令行输入口令屏蔽问题提供独立于平台的解决方案为口令屏蔽提供一个改进的解决方案(可靠而安全)
口令屏蔽
登录屏幕和登录对话框使用口令屏蔽技术这种技术要么在输入口令时隐藏口令要么显示一个字符(比如星号*)来代替用户输入的字符例如当您在一台 Windows机器上进行登录时一个登录对话框将会呈现在您眼前其中的口令一栏使用星号作为屏蔽或回显字符
如果操作系统是 UNIX则登录屏幕中的口令栏不显示回显字符它的做法很简单就是什么都不显示
AWT/Swing中的口令屏蔽
如果您希望为您的应用程序提供图形化的登录对话框您可以使用 AWT的 TextField类该类是一个文本组件允许编辑单行文本为了屏蔽口令栏要使用 setEchoChar方法例如为了把回显字符设置为星号您需要这样做
TextField password= new TextField();password setEchoChar(*);
基于所使用字体的平均字符宽度数字指定了文本栏的宽度您可以把回显字符设置为任何您喜欢的字符注意如果您把它设置为这意味着输入将会被回显而不会被屏蔽
在 Swing中您可以使用 JPasswordField它允许编辑单行文本视图表明正在输入内容但是不会显示原始字符 JPasswordField类与和 setEchoChar一起使用的 AWT的 TextField是源代码兼容的如果您使用 JPasswordField默认的回显字符是星号*但是您可以将其修改为任何您选定的字符此外如果您把回显字符设置为这意味着字符将在输入时显示出来而不会被屏蔽图显示了一个 Swing登录对话框其中的回显字符被设置为#使用的是下面的代码片断
JPasswordField password= new JPasswordField();password setEchoChar(#);
命令行输入屏蔽
和 AWT/Swing不同在 Java中没有特殊的 API可用于屏蔽命令行输入这也是许多开发人员一直所要求的一项功能如果您希望为命令行基于文本的 Java应用程序以及服务器端 Java应用程序提供一个登录屏幕它就很有用提供这种功能的一种方式就是使用 Java本地接口(Java Native Interface JNI)对于不了解 C/C++或者希望坚持%纯 Java代码的某些 Java开发人员来说这可能有一定难度
这里我针对这个问题提出一个解决方案在本文的早期版本中所使用的是一个 UNIX风格的登录屏幕口令根本不在屏幕上回显这样做的具体方法是让一个单独的线程通过重写和打印口令提示命令行尝试擦除回显到控制台的字符大家仍然可以从论坛下载该篇文章中专用的代码和改进后的代码
然而大家最需要的功能之一是使用星号*替换回显的字符因此本文从为口令屏蔽提供一个简单的解决方案开始接着给出改进后的更加可靠和安全的代码
简单的解决方案
这个解决方案使用一个单独的线程在输入回显字符的时候擦除它们然后使用星号代替它们这是使用 EraserThread类来完成的如代码示例所示
代码示例 EraserThread java
import java io*;
class EraserThread implements Runnable{ private boolean stop;
/***@param The prompt displayed to the user*/ public EraserThread(String prompt){ System out print(prompt);}
/*** Begin masking display asterisks(*)*/ public void run(){ stop= true; while(stop){ System out print( \*); try{ Thread currentThread() sleep();} catch(InterruptedException ie){ ie printStackTrace();}}}
/*** Instruct the thread to stop masking*/ public void stopMasking(){ this stop= false;}}
注意这个解决方案广泛利用了线程然而如果机器负载很重就不能确保 MaskingThread能够足够经常地运行请继续阅读本文的余下部分来了解代码的改进版本
PasswordField类使用了 EraserThread类这一点在代码示例中体现出来了这个类提示用户输入口令而且 EraserThread的一个实例尝试使用*屏蔽输入注意一开始将显示一个星号(*)
代码示例 PasswordField java
public class PasswordField{
/***@param prompt The prompt to display to the user*@return The password as entered by the user*/ public static String readPassword(String prompt){ EraserThread et= new EraserThread(prompt); Thread mask= new Thread(et); mask start();
BufferedReader in= new BufferedReader(new InputStreamReader(System in)); String password=;
try{ password= in readLine();} catch(IOException ioe){ ioe printStackTrace();}// stop masking et stopMasking();// return the password entered by the user return password;}}
作为如何使用 PasswordField类的一个例子考虑应用程序 TestApp如示例代码所示这个应用程序显示一条提示并等待用户输入口令当然输入被屏蔽为星号(*)
代码示例 TestApp java
class TestApp{ public static void main(String argv[]){ String password= PasswordField readPassword( Enter password:); System out println( The password entered is:+password);}}
如果您在 Windows MacOS或 UNIX操作系统上运行 TesApp您将会发现其输出与图类似此外还要注意当您运行该应用程序时会显示一个初始的星号
使代码安全而可靠
上述的简单解决方案有一个主要缺陷不应该使用字符串来存储诸如口令这类敏感信息!在本文的余下部分中将会给出一个经过改进的解决方案
然而首先 MaskingThread类能够从几处改进中获益
为了确保跨线程的可见性尤其是在多 CPU的机器上 stop字段应该被标记为 volatile volatile关键字指定同步线程使用该字段这样编译器就不会对它进行任何优化换句话说应该从内存读取变量的值而不应该在堆栈中保存任何拷贝
为了确保屏蔽能够在系统高负荷运转时也能够出现在调用持续期间调用线程的优先权被设定为最大返回时再恢复其原始的优先权
代码示例显示了修订后的 MaskingThread类修改的地方均以粗体形式突出显示
import java io*;
/*** This class attempts to erase characters echoed to the console*/
class MaskingThread extends Thread{ private volatile boolean stop; private char echochar=*;
/***@param prompt The prompt displayed to the user*/ public MaskingThread(String prompt){ System out print(prompt);}
/*** Begin masking until asked to stop*/ public void run(){
int priority= Thread currentThread() getPriority(); Thread currentThread() setPriority(Thread MAX_PRIORITY);
try{ stop= true; while(stop){ System out print( \+ echochar); try{// attempt masking at this rate Thread currentThread() sleep();}catch(InterruptedException iex){ Thread currentThread() interrupt(); return;}}} finally{// restore the original priority Thread currentThread() setPriority(priority);}}
/*** Instruct the thread to stop masking*/ public void stopMasking(){ this stop= false;}}
尽管使用 Strings收集和存储口令看起来似乎很合逻辑它们并不适合存储诸如口令这样的敏感信息这是因为 Strings类型的对象是不可改变的——使用后不能重写或修改字符串的内容应该使用一个 chars数组作为代替修订后的 PasswordField如代码示例所示它是根据 Using Password Based Encryption改写而来
代码示例 PasswordField java
import java io*;import java util*;
/*** This class prompts the user for a password and attempts to mask input with**/
public class PasswordField{
/***@param input stream to be used(e g System in)*@param prompt The prompt to display to the user*@return The password as entered by the user*/
public static final char[] getPassword(InputStream in String prompt) throws IOException{
MaskingThread maskingthread= new MaskingThread(prompt); Thread thread= new Thread(maskingthread); thread start();
char[] lineBuffer; char[] buf; int i;
buf= lineBuffer= new char[ ];
int room= buf length; int offset=; int c;
loop: while(true){ switch(c= in read()){ case: case: break loop;
case \r: int c= in read(); if((c!=)&&(c!=)){ if(!(in instanceof PushbackInputStream)){ in= new PushbackInputStream(in);}((PushbackInputStream)in) unread(c);} else{ break loop;}
default: if( room<){ buf= new char[offset+ ]; room= buf length offset; System arraycopy(lineBuffer buf offset); Arrays fill(lineBuffer); lineBuffer= buf;} buf[offset++]=(char) c; break;}} maskingthread stopMasking(); if(offset==){ return null;} char[] ret= new char[offset]; System arraycopy(buf ret offset); Arrays fill(buf); return ret;}}
最后 PasswordApp类如代码示例所示它只是一个用于测试修订后代码的测试应用程序
代码示例 PasswordApp java
import java io*;
lishixinzhi/Article/program/Java/hx/201311/25934关于java prompt是什么到此分享完毕,希望能帮助到您。