java - 我生疏了,不知道如何在 Java swing 中正确处理异常

标签 java swing exception

所以,我有这个程序,并且运行正常。但我有一个问题。您不应该添加已存在于我的数组的 ID 表中的 ID。

这是我的添加按钮上的监听器代码 (laggTill) 我不知道如何使异常停止添加数据。因此,当我将字母放入我的 ID 框中时,我不认为能够添加它。但它仍然如此。通过 JOptionPane 出现并显示错误消息,但仍将其添加到数组中。我该如何阻止这种情况发生? 我虽然异常停止了一切,但显然事实并非如此。

而且我还需要 ID 检查的异常(exception)才能工作。我不知道该怎么做。我已经有一段时间没有这样做了,所以我无法弄清楚。

所以,基本上,我的问题是:如何使异常阻止数据被添加。我如何让我的类(class)检查 ID 是否唯一?

主类:

私有(private)类Listener实现ActionListener {

    String getId;

    @Override
    public void actionPerformed(ActionEvent ae) {

        if (ae.getSource() == laggTill) {

            DTODjur dto = new DTODjur();

            dto.djurNamn = textFieldNamn.getText();
            dto.djurKategori = (String) comboBox.getSelectedItem();
            try {
                dto.djurID = Integer.parseInt(textFieldId.getText());
                dao.laggTill(dto);
            } catch (WrongDjurID ex) {
                 JOptionPane.showMessageDialog(null, ex.getMessage());
            }
            catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
            textArea.setText("Lade till: \nID: " + textFieldId.getText() + "\nNamn: " + textFieldNamn.getText() + "\nKategori: "+ comboBox.getSelectedItem());
        }

DAO 类:

public void laggTill(DTODjur dto) throws WrongDjurID {

    boolean found = false;

    openDB();

    try {
        int djurid = dto.djurID;
        String djurnamn = dto.djurNamn;
        String djurkategori = dto.djurKategori;

        String SQL = "INSERT INTO h12mjont_djur(djurID,djurNamn,djurKategori) VALUES('" + djurid + "','" + djurnamn + "','" + djurkategori + "')";

        System.out.println(SQL);
        st.executeUpdate(SQL);
        found=true;

    } catch (SQLException ex) {
    }
    if (!found) {
        throw new WrongDjurID("Id ska inte innehålla bokstäver");
    }else  {

    dtodjur = getAll();
   }

    closeDB();
    dtodjur = getAll();
}

最佳答案

你的问题是你正在捕获异常,然后通过在捕获后编写代码来继续进行,就好像什么也没发生一样。我建议将所有 catch 逻辑移至每个方法的最后。在你的第一个 block 中将其更改为:

字符串获取Id;

@Override
public void actionPerformed(ActionEvent ae) {

    if (ae.getSource() == laggTill) {

        DTODjur dto = new DTODjur();

        dto.djurNamn = textFieldNamn.getText();
        dto.djurKategori = (String) comboBox.getSelectedItem();
        try {
            dto.djurID = Integer.parseInt(textFieldId.getText());
            dao.laggTill(dto);
            textArea.setText("Lade till: \nID: " + textFieldId.getText() + "\nNamn: " + textFieldNamn.getText() + "\nKategori: "+ comboBox.getSelectedItem());
        } catch (WrongDjurID ex) {
             JOptionPane.showMessageDialog(null, ex.getMessage());
        }
        catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

第二段代码:

public void laggTill(DTODjur dto) throws WrongDjurID {
   openDB();

   try {
    int djurid = dto.djurID;
    String djurnamn = dto.djurNamn;
    String djurkategori = dto.djurKategori;

    String SQL = "INSERT INTO h12mjont_djur(djurID,djurNamn,djurKategori) VALUES('" + djurid + "','" + djurnamn + "','" + djurkategori + "')";

    System.out.println(SQL);
    st.executeUpdate(SQL);
    dtodjur = getAll();

   } catch (SQLException ex) {
      throw new WrongDjurID("Id ska inte innehålla bokstäver");
   } finally {
      closeDB();
   }
}

现在,如果抛出异常,则 getAll() 调用将不会运行。以前,即使抛出异常,您也会运行 getAll() ,这会重新读取列表。记住在读取数据库后使用finally子句进行清理,无论读取成功还是抛出异常。

关于java - 我生疏了,不知道如何在 Java swing 中正确处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412189/

相关文章:

java - 我的类是其他泛型类的子类吗?

java - 如何为 AWS Lambda 函数指定自定义配置?

java - JComboBox 中枚举的人类可读值

java - 尝试运行程序 : Truncated module-info. 类时出现 netbeans 错误

vb.net - MQQueueManager 构造函数抛出 FileNotFoundException

java - 死 Java 线程和 native 操作系统线程

java - 编译 GWT 应用程序时出错 (Errai)

java - 投影鼠标坐标

java - SwingWorkers 停止工作

c# - 在另一个线程中抛出异常时不调用 UnhandledException