- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我必须编写一个程序,提示用户输入密码,该密码必须满足三个要求:长度至少为 8 个字符,只能包含字母和数字,并且至少为两位数字。现在,我创建的用于检查这三个要求的方法我相信是合理的,但是我的程序还必须执行一些异常处理,并且能够在其中一个要求关闭时要求用户重新输入密码,并向用户显示相应的错误消息遵守每一项要求。我创建了一个字符串 errorMessage 来转发该消息,但当我尝试在 main 中调用它时,它给了我一个错误?
我的另一个问题是,必须使用 JPasswordField 将密码输入到我的程序中,但我什至都在努力设置它,因为我读到的许多其他因素,如 JPanel、按钮和操作事件都必须消失与它一起。我尝试使用 JPasswordField 并注意到接收密码的行将其作为数组接收,当我的 checkPassword 方法需要字符串时,我如何将该密码作为字符串接收?
这是我到目前为止的程序:
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javafx.event.ActionEvent;
public class Ed10Chp6Ex6Point18CheckPasswordProgram {
public static void main(String[] args) {
final JFrame frame = new JFrame("Check Password Program");
JLabel jlbPassword = new JLabel("Please enter the password: ");
JPasswordField jpwName = new JPasswordField(15);
jpwName.setEchoChar('*');
jpwName.addActionListener(new ActionListener()) {
public void actionPerformed(ActionEvent e) {
JPasswordField input = (JPasswordField) e.getSource();
char[] password = input.getPassword();
if(checkPassword(password)){
JOptionPane.showMessageDialog(frame, "Congradulations, your password follows all the requirements");
}
else{
JOptionPane.showMessageDialog(frame, errorMessage);
}
}
}
}
public static boolean checkPassword(String x) {
String errorMessage = "";
//must have at least eight characters
if (x.length() < 8){
errorMessage = "The password you entered is invalid, password must be at least 8 characters";
return false;
}
//consists of only letters and digits
for (int i = 0; i < x.length(); i++) {
if (!Character.isLetter(x.charAt(i)) && !Character.isDigit(x.charAt(i))) {
errorMessage = "The password you entered is invalid, password must contain only letters and digits";
return false;
}
}
//must contain at least two digits
int count = 0;
for (int i = 0; i < x.length(); i++) {
if (Character.isDigit(x.charAt(i))){
count++;
}
}
if (count >= 2){
return true;
}
else {
errorMessage = "The password you entered is invalid, password must contain at least two digits";
return false;
}
}
}
如果我的一些问题看起来很简单,我提前道歉,任何帮助将不胜感激,谢谢!
最佳答案
有两件事:
(1) 确保导入正确的类,不要依赖 IDE 来进行正确的导入。您正在从 JavaFX 导入 ActionEvent 类,但您使用的框架是 Swing。
改变
import javafx.event.ActionEvent;
至
import java.awt.event.ActionEvent;
我不太熟悉 JavaFX 和 Swing 之间的配合如何,但使用正确的类通常有助于避免令人头疼的问题和编译/运行时错误。
(2) java.lang.String 类中的静态方法提供了一种将 char 数组转换为字符串的便捷方法。在您的 actionPerformed
方法中,添加以下内容:
String passStr = String.valueOf(password);
例如
@Override
public void actionPerformed(ActionEvent e) {
// Get the source of the event, we know it is a JPasswordField so we cast it.
JPasswordField input = (JPasswordField) e.getSource();
// Get the char array from the input the user typed stored in the input object.
char[] password = input.getPassword();
// Convert char[] to String
String passwordStr = String.valueOf(password);
if(checkPassword(passwordStr)){
JOptionPane.showMessageDialog(frame, "Congradulations, your password follows all the requirements");
} else {
JOptionPane.showMessageDialog(frame, errorMessage);
}
}
关于Java JPasswordField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516048/
所以我必须编写一个程序,提示用户输入密码,该密码必须满足三个要求:长度至少为 8 个字符,只能包含字母和数字,并且至少为两位数字。现在,我创建的用于检查这三个要求的方法我相信是合理的,但是我的程序还必
我的程序在初始化程序之前需要用户的用户名和密码验证,所以我创建了一个按钮登录,我将 ActionListener 关联到该按钮,如下所示 login.addActionListener(new
您好,我在这里尝试做的是接收用户输入的密码,然后将其与 if 语句中的正确密码进行比较。 public void actionPerformed(ActionEvent event) { St
我有创建一个 Jframe 的代码,我在其中添加了一个带有图片的 JLabel 和一个 JpasswordField。我希望 JpasswordField 位于图像之上,但仅取决于我在哪里执行 f.a
我关注了this Oracles tutorial关于 JPasswordField,我创建了一个简单的演示应用程序: import java.awt.event.ActionEvent; impor
Java 的 JPasswordField 正在对用户在密码字段中输入的输入进行编码,我不想要它。我正在根据纯数值的数据库值检查密码。 我正在输入密码的数值作为 12345 它返回 [C@1e9b48
我知道以前有人问过这个问题,但他们没有使用 .equals()。所以我要再问一次,为什么我有两个字符串,但是当我将它们与 .equals() 进行比较时,我得到了 false。这两个字符串是 1234
当输入类似密码时 yeast bulk seize is shows pain 每个人都可以听到敲击空格键的声音,因此在密码字段中显示空格似乎也是合乎逻辑的。所以我想要一些能够展示的东西 *****
抱歉再次提起这个话题,我已经仔细阅读了另一个类似的问题 Why does JPasswordField.getPassword() create a String with the password
--编辑-- 我有一个 JTextField,我希望每次有人更改(键入或删除)JTextField 中的字符时调用一个方法(现在只是打印语句)。其背后的目的是让该方法立即检查键入的内容是否满足某些条件
大家好,我需要一个密码,我想将其写入 JPasswordField(JPasswordFieldAnon) 并将提交操作附加到两个 JButton(AnonButton 和 AnonButton1)。
我是 JApplet 的新手。我不知道如何从方法 actionPerformed 内的内部类访问 JPasswordField 对象。我想将 PasswordField 添加到我的 JFrame Bi
我有一个代码,用于检查用户输入是否仅为字母数字,并根据标准检查输入的密码的强度。如果出现以下情况,则会出现带有注释的标签: -字段为空 -使用了无效字符 并且还会显示密码是否为弱、中、强和非常强 th
程序将初始化一个密码。然后,如果用户想要更改密码,他们将单击更改密码按钮。然后,程序将打开一个新窗口,用户必须输入当前密码、新密码和确认密码,然后如果您再次登录,密码将更改。我的程序的问题是它不更改其
我需要填充JPassword字段。但是看起来没有方法 setPassword (char []) 唯一的方法是 setText 。但是我需要提供一个 String 由于 getText 已被弃用,所以
我正在编写一个带有 JPasswordField 的小程序,我想知道是否可以保护我的 JPasswordField 的内容,以防用户的 PC 被键盘记录器入侵...... 我知道 Java 无法执行内
JPasswordField 的默认密码符号是一个点。 但这将被 Java Look and Feel 替换为星号。 有没有办法在加载外观后将此符号再次替换为点? 我已经知道在加载外观代码之前初始化或
任何人都可以帮助我编写这段代码,因为我是 Java 新手。我在网上找到了这段代码,我想了解它的作用? pass = new JPasswordField(10); pass.addKeyLis
在我的软件中,我提供了用于FTP登录的工具。我使用 JPasswordField 作为登录面板的密码部分。但是,建议将 JPasswordField 数组的每个字符设置为 0 以保证其安全。但我不确定
这个问题已经有答案了: Displaying the password in a JPasswordField rather than setting 0 as an echo char (5 个回答
我是一名优秀的程序员,十分优秀!