gpt4 book ai didi

java - 异常处理(或日志记录)

转载 作者:行者123 更新时间:2023-12-02 05:53:23 26 4
gpt4 key购买 nike

我对异常处理比较陌生,这是我的问题:我正在用 Java 编写一个应用程序,用户必须在同一框架上的各个面板上的各个字段中输入数据。每个面板都有一个保存按钮。按“保存”后,将使用数据作为属性创建对象。每个 setter 方法都会检查数据(字符串必须小于一定长度,整数必须落在一定的间隔内等),如果不正常,则会抛出异常(我创建了自己的 BadDataException 类型)。这些异常会一直抛出回框架,框架应该处理(显示)它们。

所以问题是:如果用户在多个字段中输入错误数据,我如何向他显示他犯错误的所有字段?现在我得到的只是第一个抛出异常的消息(我知道它应该是这样的)。我是否必须在面板本身中添加一些检查(我认为这样做不太正确),或者有什么方法可以在他按“保存”后“记录”所有异常?如果我能做到这一点,那么我将能够将它们全部显示在主框架上的标签中。

我想问题已经足够清楚了,但我写了一些简单的代码来说明。

public class MyFrame extends JFrame {

private JTextField stringFieldOne;
private JTextField stringFieldTwo;

public MyFrame() {

stringFieldOne = new JTextField();
this.add(stringFieldOne);

stringFieldTwo = new JTextField();
this.add(stringFieldTwo);

JButton saveButton = new JButton();
saveButton.addActionListener(new SaveButtonListener());
this.add(saveButton);

}//constructor

private void save() {

SaveObject obj = new SaveObject();

try {
obj.setStringOne(stringFieldOne.getText());
obj.setStringTwo(stringFieldTwo.getText());
}
catch (BadDataException bde) {
//what goes here???
}

}//method

class SaveButtonListener implements ActionListener {

public void actionPerformed(ActionEvent evt) {

save();

}//method

}//class

}//class


public class SaveObject {

private String theStringOne;
private String theStringTwo;

public void setStringOne(String someString) throws BadDataException {

if (someString.length() <= 20) {
theStringOne = someString;
}
else {
throw new BadDataException("The string you introduced has more than 20 characters");
}

}//method

public void setStringTwo(String someString) throws BadDataException {

if (someString.length() <= 5) {
theStringTwo = someString;
}
else {
throw new BadDataException("The string you introduced has more than 5 characters");
}

}//method

}//class

最佳答案

在 set 方法中引发异常可能不太适合您的要求。异常打破了正常的控制流程,进入异常处理控制流程。也就是说,您的所有其他数据检查将永远不会被执行。

通常,对于类似的事情,您会验证所有数据并将验证结果收集在列表中。只有在所有验证完成后,如果列表不为空,则抛出异常。

示例:

private void save() {
SaveObject obj = new SaveObject();

obj.setStringOne(stringFieldOne.getText());
obj.setStringTwo(stringFieldTwo.getText());

List<string> validationErrors = obj.validate();

if (validationErrors.length > 0) {
// do whatever you need to do, e.g. throw an exception, or render the
// messages.
}
}

关于java - 异常处理(或日志记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23338269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com