【问题标题】:JToggleButton and unexpected nullPointerExceptionJToggleButton 和意外的 nullPointerException
【发布时间】:2014-01-02 23:11:07
【问题描述】:

我有一个类PolaczZBaza 有两种方法- polacz() - 打开与 sql 数据库的连接 rozlacz() 关闭此数据库 有一个JToggleButton 用于连接这个数据库。

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        try {
            PolaczZBaza.polacz();
            this.setText("Rozłącz z bazą danych");
            MenuGorne.ustawienia.setEnabled(false);
            PanelGlowny.ustawienia.setEnabled(false);
            PanelGlowny.wykonaj.setEnabled(true);
            PanelGlowny.importXML.setEnabled(true);
            MenuGorne.importXML.setEnabled(false);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Błąd łączenia z bazą danych2");
        }
    } else {
        try {
            PolaczZBaza.rozlacz();
            this.setText("Połącz z bazą danych");
            MenuGorne.ustawienia.setEnabled(true);
            PanelGlowny.ustawienia.setEnabled(true);
            PanelGlowny.wykonaj.setEnabled(false);
            PanelGlowny.importXML.setEnabled(false);
            MenuGorne.importXML.setEnabled(false);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Błąd podczas próby rozłączenia z bazą danych");
        }
    }
}

当无法建立连接时有消息但同时方法rozlacz() 抛出NullPointerException。我认为这是因为他试图关闭未打开 连接,但我不知道为什么会这样,因为不应该使用方法 rozlacz()

public static void rozlacz() throws SQLException {
    statement.close();

}

感谢您的帮助 编辑: 公共类 PolaczZBaza {

public static Connection connection;
public static Statement statement;

public static void polacz() throws SQLException {
    connection = DriverManager.getConnection("jdbc:firebirdsql://"
            + PanelGlowny.ustawieniaBazy.getSerwer() + "/"
            + PanelGlowny.ustawieniaBazy.getSciezka() + "\"",
            PanelGlowny.ustawieniaBazy.getLogin(),
            PanelGlowny.ustawieniaBazy.getHaslo());
    statement = connection.createStatement();
}

public static void rozlacz() throws SQLException {
    statement.close();

}

PanelGlowny.ustawieniaBazy 这是一个带有设置的框架。如果我输入正确的数据一切都很好

【问题讨论】:

  • 能否在polacz()方法中添加代码?
  • 我编辑了,波兰名字很抱歉

标签: java swing jdbc nullpointerexception jtogglebutton


【解决方案1】:

请发布完整的 PolaczZBaza 课程。无论如何,语句可能为空。在这种情况下,我们正在创建这个结构:

void closeResources(PreparedStatement statement, ResultSet resultSet, Connection connection) {
    if(statement != null) try { statement.close(); } catch (SQLException) { //log..}
    if(resultSet!= null) try { resultSet.close(); } catch (SQLException) { //log..}
    if(connection!= null) try { connection.close(); } catch (SQLException) { //log..}
}

它是空指针安全的,捕获异常确保所有资源都将被关闭。

【讨论】:

  • 你能解释一下为什么当我点击按钮时它会抛出一个异常,并且 else 块中的 PolaczZBaza.rozlacz() 方法会执行
  • 我会更改您的 itemStateChanged 方法:首先,检查 e 是否是您的 JToggleButton 的实例。然后,将 e 转换为 ToggleButton:JToggleButton button = (JToggleButton)e.getSource();。最后,不要检查if (e.getStateChange() == ItemEvent.SELECTED) ... else ...,而是检查if (button.isSelected()) ... else ...
  • 感谢您的帮助,我在关闭前添加了 if (PolaczZBaza.statement != null),它有帮助
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
相关资源
最近更新 更多