0

我创建了一个有 4 列的 MySQL 数据库。我想读取数据库的第二列并将其显示在文本区域中。我有当我点击一个按钮时调用的方法 display() 。该方法的代码是:

public void display(){
    db=new Database();
    try{
        int n=Integer.parseInt(field.getText());

        ResultSet rset=Database.conn.createStatement().executeQuery("select * from mymusic where trackNumber like'"+n+"'");
        while(rset.next()){
            area.setText(rset.getString("Songlocation"));
        }
        rset.close();

    }catch(SQLException e){
        JOptionPane.showMessageDialog(this,"Database error","Warning",JOptionPane.ERROR_MESSAGE);
    }
    catch(NumberFormatException numfom)
    {
        JOptionPane.showMessageDialog(this,"Invalid Entry","Warning",JOptionPane.ERROR_MESSAGE);
    }

}

当我执行代码并且因为没有显示时,线程“AWT-EventQueue-0”java.Lang.NullPointerException 中的异常被抛出。数据库连接完美,因为我可以成功更新数据库。帮助我在文本区域打印数据。

4

1 回答 1

1

如果没有完整的堆栈跟踪,很难确定究竟是什么导致了NullPointerException.

查看源代码传递时Integer.parseInt不会抛出 a ,并且也可以处理值。NullPointerExceptionnullJTextArea#setTextnull

剩下的候选者:fieldcan be nullrsetcan be null(不太可能在代码中的其他位置触发 NPE),areacan be null。应该非常直接地确定您何时拥有堆栈跟踪或使用调试器。

除此之外,还有其他一些建议:

  • 您应该将您的rset.close()语句移动到一个finally块中以确保它被关闭,即使发生异常也是如此
  • 您不应在事件调度线程上查询数据库。请改用工作线程。数据库访问是一项缓慢的操作,这将导致 UI 被阻塞,直到查询完成。有关更多信息,请参阅Swing 中的并发教程
于 2012-07-24T21:57:26.277 回答