Java 从方法中抛出异常方法
我有一个由JButton Actionperformed触发的登录方法Java 从方法中抛出异常方法,java,exception,exception-handling,nullpointerexception,Java,Exception,Exception Handling,Nullpointerexception,我有一个由JButton Actionperformed触发的登录方法 private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) { try { Users userData = userDAO.login(Integer.parseInt(loginUserId.getText()), String.valueOf(loginUserPassword.getPassword()))
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
Users userData = userDAO.login(Integer.parseInt(loginUserId.getText()), String.valueOf(loginUserPassword.getPassword()));
} catch (SQLException ex) {
LOGGER.log(Level.SEVERE, ex.toString(), ex);
JOptionPane.showMessageDialog(null, "Error SQL: Please Contact your System Administrator", cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);
} catch (NullPointerException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Pls write a number", cf.WINDOW_TITLE, JOptionPane.ERROR_MESSAGE);
}
}
下面是我从数据库返回对象的方法
public Users login(int userId, String password) throws NumberFormatException, SQLException , NullPointerException {
SQL sql = new SQL();
query = sql.createPStatement(cf.SELECT_USER_BY_LOGIN_DATA);
query.setInt(1, userId);
query.setString(2, password);
ResultSet resultSet = query.executeQuery();
try {
if (!resultSet.isBeforeFirst()) {
throw new NullPointerException("User Not Found");
}
while (resultSet.next()) {
Users newLoggedUser = new Users();
//Set Object Values
return newLoggedUser;
}
} catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
throw e;
}
catch (NullPointerException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
throw e;
} catch (NumberFormatException e) {
LOGGER.log(Level.SEVERE, e.toString(), e);
throw e;
} finally {
SQLUtils.closeQuietly(sql.dbConection());
SQLUtils.closeQuietly(resultSet);
SQLUtils.closeQuietly(query);
}
return null;
}
我必须根据以下内容向用户显示多条错误消息:
- 未找到用户(无SQL结果)李>
- 键入字母而不是数字
- SQL错误李>
NULL
,我是否应该停止应用程序执行更多操作,使用抛出新的NullPointerException(“未找到用户”)代码>
JButton ActionPerformed try/Catch?
抛出e代码>再次在DAO方法中被actionperformedtry/Catch
捕获
您几乎不需要捕获
NullPointerException
。它表示您(程序员)正在对所使用的语言或API执行错误的操作。“抛出新的NullPointerException(“未找到用户”);”
如果您没有取消对null引用的引用,则不应使用此异常。不如换一个NoTouchElementException
“用字母代替数字”@谢谢你,到目前为止,我是一个初级程序员,正在尽力做到最好。抛出新的NullPointerException(“未找到用户”)
将停止程序以读取所有方法代码,但如果没有必要,我将删除它。我还没有看到NoTouchElementException
,非常感谢您的提醒。@Andy Turner这是怎么回事,我不知道。因为对象为空,如果我没有捕捉到NullPointerExpection
,程序就会崩溃。你有什么例子能让我走上正确的道路吗。谢谢。您几乎不需要捕捉NullPointerException
。它表示您(程序员)正在对所使用的语言或API执行错误的操作。“抛出新的NullPointerException(“未找到用户”);”
如果您没有取消对null引用的引用,则不应使用此异常。不如换一个NoTouchElementException
“用字母代替数字”@谢谢你,到目前为止,我是一个初级程序员,正在尽力做到最好。抛出新的NullPointerException(“未找到用户”)
将停止程序以读取所有方法代码,但如果没有必要,我将删除它。我还没有看到NoTouchElementException
,非常感谢您的提醒。@Andy Turner这是怎么回事,我不知道。因为对象为空,如果我没有捕捉到NullPointerExpection
,程序就会崩溃。你有什么例子能让我走上正确的道路吗。谢谢,非常感谢!。我将为该类编写代码并更新问题。如何传递异常,同样,需要在LoginException中再次尝试/捕获它。?例如,public LoginException(异常e){try{if(e.getClass()==NoSuchElementException.class){JOptionPane.showMessageDialog(null,“未找到用户”);}}}catch(NoSuchElementException ex){throw ex;}
@JuanSebastianOsorio否。当您遇到无法继续的异常
情况(即交易失败)时,您会像创建任何其他对象一样创建新的LoginException,然后将其抛出。然后它跳转到ActionListener,在那里您可以执行JOptionPane.showMessageDialog(null,例如getMessage())代码>在catch块中类似这样的内容?但我必须知道例外情况是不是被抛出了?来配置消息。谢谢你抽出时间。非常感谢您的帮助。@JuanSebastianOsorio是的,就像他们在链接中所做的那样。至于“但我必须知道哪种例外……”您在上面描述了错误案例。如果找不到用户,在这种情况下,您甚至不会有异常,但您应该抛出带有消息的LoginException:“找不到用户”。如果有SQL异常:“数据库有问题…”如果有数字,同样:“请仅使用用户ID字符”非常感谢!。我将为该类编写代码并更新问题。如何传递异常,同样,需要在LoginException中再次尝试/捕获它。?例如<
public class LoginException extends Exception{
public LoginException(Exception cause, String message) {
..
}
}