JToggleButton和意外的nullPointerException

时间:2014-01-02 23:11:07

标签: java swing jdbc nullpointerexception jtogglebutton

我有一个班级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这是一个有设置的框架。如果我输入正确的数据,一切都很好

1 个答案:

答案 0 :(得分: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..}
}

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