抛出并捕获自定义异常
Throw and Catch Custom Exception
我有一种方法可以通过从“文件打开”对话框中选择它来加载客户文件,并且它有效,但当我单击“取消”按钮时除外。即使我按下“取消”按钮,它仍会加载所选文件。如果单击“取消”按钮,我想加载自定义异常。请问有什么关于如何在我的方法中实现自定义异常的帮助吗?谢谢
private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt) {
Customer customerfile = null;
try {
final JFileChooser chooser = new JFileChooser("Customers/");
int chooserOption = chooser.showOpenDialog(null);
chooserOption = JFileChooser.APPROVE_OPTION;
File file = chooser.getSelectedFile();
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(file)
);
customerfile = (Customer) in .readObject();
custnameTF.setText(customerfile.getPersonName());
custsurnameTF.setText(customerfile.getPersonSurname());
custidTF.setText(customerfile.getPersonID());
custpassidTF.setText(customerfile.getPassaportID());
customertellTF.setText(customerfile.getPersonTel());
customermobTF.setText(customerfile.getPersonMob());
consnameTF.setText(customerfile.getConsultantname());
conssurnameTF.setText(customerfile.getConsultantsurname());
considTF.setText(customerfile.getConsulid());
in .close();
} catch (IOException ex) {
System.out.println("Error Loading File" + ex.getMessage());
} catch (ClassNotFoundException ex) {
System.out.println("Error Loading Class");
} finally {
System.out.println("Customer Loaded");
}
}
你没有使用 chooserOption,一旦它有选择的值,只需添加一个 if 条件来检查 chooserOption 值,如果选择,则执行否则抛出你的异常
看起来您正在对选择器的结果进行赋值而不是测试。
而不是
chooserOption = JFileChooser.APPROVE_OPTION;
你应该
if (chooserOption == JFileChooser.APPROVE_OPTION) {
// handle open file
} else {
throw new CancelException();
}
编辑
作为对评论的回应,异常应该扩展 Exception(对于已检查的异常)、RuntimeException(对于未检查的异常)或其中之一的后代 类。此级别的唯一区别是您不需要在方法签名的 throws
中声明未经检查的异常。您的异常看起来像这样
public class CancelException extends Exception {
public CancelException() {
}
public CancelException(String message) {
super(message);
}
}
另一条评论 - 应在特殊情况下使用例外情况。使用它们来实现逻辑通常被认为是不好的做法 - 您真的需要使用异常吗?
进行方法声明以抛出异常:
private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt)
throws CustomException {
您总是 APPROVE_OPTION
选择器选项:
chooserOption = JFileChooser.APPROVE_OPTION;
您必须使对话框按钮侦听器才能修改此变量并添加条件:
if (chooserOption == JFileChooser.APPROVE_OPTION) {
// load file
} else {
throw new CustomException("ERROR MESSAGE");
}
你的 CustomException
Class 必须看起来像:
class CustomExceptionextends Exception {
public CustomException(String msg) {
super(msg);
}
}
您不应将任何内容分配给 chooserOption
。您应该使用 JFileChooser.showOpenDialog()
的 return 值,它包含有关对话框显示结果的信息。
示例:
int chooserOption = chooser.showOpenDialog(null);
if (chooserOption == JFileChooser.CANCEL_OPTION) {
// throw your exception (or do some other actions) here
}
我有一种方法可以通过从“文件打开”对话框中选择它来加载客户文件,并且它有效,但当我单击“取消”按钮时除外。即使我按下“取消”按钮,它仍会加载所选文件。如果单击“取消”按钮,我想加载自定义异常。请问有什么关于如何在我的方法中实现自定义异常的帮助吗?谢谢
private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt) {
Customer customerfile = null;
try {
final JFileChooser chooser = new JFileChooser("Customers/");
int chooserOption = chooser.showOpenDialog(null);
chooserOption = JFileChooser.APPROVE_OPTION;
File file = chooser.getSelectedFile();
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(file)
);
customerfile = (Customer) in .readObject();
custnameTF.setText(customerfile.getPersonName());
custsurnameTF.setText(customerfile.getPersonSurname());
custidTF.setText(customerfile.getPersonID());
custpassidTF.setText(customerfile.getPassaportID());
customertellTF.setText(customerfile.getPersonTel());
customermobTF.setText(customerfile.getPersonMob());
consnameTF.setText(customerfile.getConsultantname());
conssurnameTF.setText(customerfile.getConsultantsurname());
considTF.setText(customerfile.getConsulid());
in .close();
} catch (IOException ex) {
System.out.println("Error Loading File" + ex.getMessage());
} catch (ClassNotFoundException ex) {
System.out.println("Error Loading Class");
} finally {
System.out.println("Customer Loaded");
}
}
你没有使用 chooserOption,一旦它有选择的值,只需添加一个 if 条件来检查 chooserOption 值,如果选择,则执行否则抛出你的异常
看起来您正在对选择器的结果进行赋值而不是测试。
而不是
chooserOption = JFileChooser.APPROVE_OPTION;
你应该
if (chooserOption == JFileChooser.APPROVE_OPTION) {
// handle open file
} else {
throw new CancelException();
}
编辑
作为对评论的回应,异常应该扩展 Exception(对于已检查的异常)、RuntimeException(对于未检查的异常)或其中之一的后代 类。此级别的唯一区别是您不需要在方法签名的 throws
中声明未经检查的异常。您的异常看起来像这样
public class CancelException extends Exception {
public CancelException() {
}
public CancelException(String message) {
super(message);
}
}
另一条评论 - 应在特殊情况下使用例外情况。使用它们来实现逻辑通常被认为是不好的做法 - 您真的需要使用异常吗?
进行方法声明以抛出异常:
private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt)
throws CustomException {
您总是 APPROVE_OPTION
选择器选项:
chooserOption = JFileChooser.APPROVE_OPTION;
您必须使对话框按钮侦听器才能修改此变量并添加条件:
if (chooserOption == JFileChooser.APPROVE_OPTION) {
// load file
} else {
throw new CustomException("ERROR MESSAGE");
}
你的 CustomException
Class 必须看起来像:
class CustomExceptionextends Exception {
public CustomException(String msg) {
super(msg);
}
}
您不应将任何内容分配给 chooserOption
。您应该使用 JFileChooser.showOpenDialog()
的 return 值,它包含有关对话框显示结果的信息。
示例:
int chooserOption = chooser.showOpenDialog(null);
if (chooserOption == JFileChooser.CANCEL_OPTION) {
// throw your exception (or do some other actions) here
}