《Java程序设计》实 验 报 告(二)
实验名称: 异常处理 | 实验地点: 10-413 |
所使用的工具软件及环境: 环境:Windows 8.1;jdk 1.8; 工具:eclipse | |
实验目的: 了解异常处理机制,掌握异常处理的设计方法。 | |
实验内容: 用户自定义一个异常,编程创建并抛出某个异常类的实例。运行该程序并观察执行结果。 例如:用户密码的合法化验证。 要求密码有4-6个数字组成。若长度不落在这个范围或不是有数字组成。抛出自己的异常。 要求: 1.图形界面,面向对象编程。 2.异常定义,抛出,捕捉三个流程。
| |
源程序: //LoginGUI.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LoginGUI extends JFrame { private JTextField usernameField; private JPasswordField passwordField; public LoginGUI() { super("登录界面"); // 创建一个垂直居中的Box容器 Box box = Box.createVerticalBox(); add(box); //box.add(Box.createVerticalStrut(50)); // 添加50个像素的垂直空白间隔 box.add(new JLabel("用户名:")); box.add(Box.createVerticalStrut(10)); // 添加10个像素的垂直空白间隔 usernameField = new JTextField(20); box.add(usernameField); box.add(Box.createVerticalStrut(20)); // 添加20个像素的垂直空白间隔 box.add(new JLabel("密码:")); box.add(Box.createVerticalStrut(10)); // 添加10个像素的垂直空白间隔 passwordField = new JPasswordField(20); passwordField.setEchoChar((char)0); box.add(passwordField); box.add(Box.createVerticalStrut(30)); // 添加30个像素的垂直空白间隔 JButton loginButton = new JButton("登录"); loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { login(); } catch (IllegalArgumentException ex) { JOptionPane.showMessageDialog(LoginGUI.this, ex.getMessage(), "错误01", JOptionPane.ERROR_MESSAGE); } catch (PasswordFormatException ex) { JOptionPane.showMessageDialog(LoginGUI.this, ex.getMessage(), "错误02", JOptionPane.ERROR_MESSAGE); } catch (PasswordFormatException2 ex) { JOptionPane.showMessageDialog(LoginGUI.this, ex.getMessage(), "错误03", JOptionPane.ERROR_MESSAGE); } } }); box.add(loginButton); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 居中显示窗口 setVisible(true); } private void login() throws IllegalArgumentException, PasswordFormatException, PasswordFormatException2 { String username = usernameField.getText(); String password = new String(passwordField.getPassword()); if (username.isEmpty() || password.isEmpty()) { throw new IllegalArgumentException("用户名和密码不能为空!"); } if (password.length() < 4 || password.length() > 6) { throw new PasswordFormatException("密码必须为4-6位!"); } if (!password.matches("[0-9]+")) { throw new PasswordFormatException2("密码必须由数字组成!"); } JOptionPane.showMessageDialog(this, "登录成功, " + username + "!"); } public static void main(String[] args) { new LoginGUI(); } } //PasswordFormatException.java class PasswordFormatException extends Exception { public PasswordFormatException(String message) { super(message); } } //PasswordFormatException2.java class PasswordFormatException2 extends Exception { public PasswordFormatException2(String message) { super(message); } } |
实验结果: 以下是一个JAVA图形界面程序,要求用户输入用户名和密码,并进行长度和格式的验证。如果用户名或密码为空,将抛出IllegalArgumentException异常。如果密码不是4-6位数字,将抛出自定义的异常类PasswordFormatException。如果密码不是由数字组成,将抛出自定义的异常类PasswordFormatException2。
|
收获与体会: 在本次实验编写的程序中,定义了一个LoginGUI类,该类继承自JFrame类,并包含一个用户名文本框、一个密码文本框和一个登录按钮。当用户点击登录按钮时,将调用login方法,该方法将检查用户名和密码是否为空,并且密码是否为4-6个数字和是否为数字组成。如果验证失败,将抛出自定义的异常类PasswordFormatException、PasswordFormatException2或IllegalArgumentException。在登录按钮的监听器中,捕获这些异常并显示错误消息。如果没有异常,将显示登录成功的欢迎消息。 总而言之,通过实验实践,我学习了解了异常处理机制,掌握了异常处理的设计方法,理解了异常定义,抛出,捕捉三个流程。除此之外,我还学习到了用Box布局swing界面,如果要将图形化界面的内容居中,可以使用Java Swing中的Box类。Box类提供了Box.createVerticalBox()和Box.createHorizontalBox()方法,可以创建垂直和水平的Box容器,用于组织和排列Swing组件,对以后JAVA的深入学习有了更多的帮助。 |