JToggleButton 和意外的 nullPointerException
Posted
技术标签:
【中文标题】JToggleButton 和意外的 nullPointerException【英文标题】:JToggleButton and unexpected 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()
方法中添加代码?
我编辑了,波兰名字很抱歉
【参考方案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),它有帮助以上是关于JToggleButton 和意外的 nullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
综合运用开关按钮JToggleButton复选框JCheckBox单选框JRadioButton和按钮ButtonGroup,设计如下界面
服务器:[http-nio-8080-exec-7] org.apache.coyote.http11.Http11Processor.service 处理请求时出错 java.lang.NullPo