0

4 列の MySQL データベースを作成しました。データベースの 2 列目を読み取り、テキスト領域に表示したいと考えています。ボタンをクリックすると呼び出されるメソッド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スローせず、 は値も処理できます。NullPointerExceptionnullJTextArea#setTextnull

残りの候補: fieldcan be nullrsetcan be null(コード内の他の場所で NPE をトリガーする可能性は低い)、can areabe nullスタックトレースがあるか、デバッガーを使用するかを判断するのは非常に簡単です。

それに加えて、他のアドバイス:

  • rset.close()例外が発生した場合でも、ブロック内でステートメントを移動して、ステートメントfinallyが確実に閉じられるようにする必要があります
  • イベント ディスパッチ スレッドでデータベースにクエリを実行しないでください。代わりにワーカー スレッドを使用してください。データベース アクセスは低速な操作であるため、クエリが完了するまで UI がブロックされます。詳細については、Swing の同時実行のチュートリアルを参照してください。
于 2012-07-24T21:57:26.277 に答える