-1

こんばんは、私は JTable を使用して作業しており、このコードは以前の作成から取得しています。私がやりたいことは、テーブルを動的に更新することです。私がそれをどのように行っているかは、情報をリンクリストに保存してから、リストを調べて情報を引き出してテーブルを埋めることです。問題は、null ポインターを取得していて、その理由について混乱していることです。私のスタックトレースの開始は次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at main$CoverSelection.actionPerformed(main.java:225)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)

明らかに、次のように読み取られる 225 行目で発生しています。

CartTable.setModel(new DefaultTableModel(data,ColumnNames));

同様の過去の質問を見ると、私が持っているすべてが初期化されていることを確認するために人々が言及しているのを見続けています。完全なコード:

data = new Object[1][4];
            //CartTable.setModel(new DefaultTableModel(data,ColumnNames));
            while(abc<OrderList.size())
            {
                System.out.println(OrderList.get(abc).getIsbn());
                System.out.println(OrderList.get(abc).GetTitle());
                System.out.println(OrderList.get(abc).getQuantity());
                System.out.println(Double.toString(OrderList.get(abc).getPrice()));
                //data = new Object[1][4];
                //CartTable.setModel(new DefaultTableModel(data,ColumnNames));
                if (data== null)
                {
                    data = new Object[1][4];
                    data[0][0] = OrderList.get(abc).getIsbn();
                    data[0][1] = OrderList.get(abc).GetTitle();
                    data[0][2] = OrderList.get(abc).getQuantity();
                    data[0][3] = Double.toString(OrderList.get(abc).getPrice());
                    CartTable.setModel(new DefaultTableModel(data,ColumnNames));
                }
                else
                {
                    System.out.println("In the else part");

                    Object [][] temp = new Object[data.length+1][4];
                    for (int rowCt =0; rowCt < data.length; rowCt++)
                    {
                        for (int colCt=0; colCt< 4; colCt++)
                        {
                            temp[rowCt][colCt] = data[rowCt][colCt];
                        }
                    }
                    temp[data.length][0] = OrderList.get(abc).getIsbn();
                    temp[data.length][1] = OrderList.get(abc).GetTitle();
                    temp[data.length][2] = OrderList.get(abc).getQuantity();
                    temp[data.length][3] = OrderList.get(abc).getPrice();
                    data = temp;
                    System.out.println("data length in else: "+data.length);
                    CartTable.setModel(new DefaultTableModel(data,ColumnNames));//line 225
            }

コードは機能し、データが null の場合は最初の if ステートメントを循環しますが、else ステートメントを介して別の行を取得するためにもう一度それを実行すると、エラーが発生します。私のイニシャライザは次のとおりです。

private Object[][] data = null;
private JTable CartTable;
String[] ColumnNames=new String[4];

ヘルプや提案はありますか? 私はすべての拠点を見てカバーしたと思いますが、それを見ることができません。

4

2 に答える 2

1

ラインの問題は、

CartTable.setModel(new DefaultTableModel(data,ColumnNames));

を宣言しているだけで、そのJTable CartTableオブジェクトをどこにも作成していません。設定する前に、次のmodelようにテーブル オブジェクトを作成するだけです。

JTable CartTable = new JTable();

設定する必要はなくdatacolumn namesすぐに後でmodelデータと列名を使用して を作成し、このモデルをテーブルに設定できます。

PS: What is a Null Pointer Exception?の回答投稿 @Vincent Ramdhanie をお読みください。. NPE発生することは非常によく説明されていました。

于 2012-12-12T04:01:51.633 に答える
1

A) Java は C/C++ ではありません。Java には「ローカル変数用の自動作成オブジェクト」という概念はありません。すべてのオブジェクトは明示的に作成する必要があります。だから、いつも

Object o = new Object();

後で o.something() を実行するときに NPEx を取得したくない場合。

そして、ここでは次のことを行う必要があります。

private JTable CartTable = new JTable(/*Object[][]*/ rowData, /*Object[]*/ columnNames);

B) OrderList.get(abc) を 1 回だけ使用し、結果を保存します。何度もやり直すのは非効率です。

于 2012-12-12T02:35:21.247 に答える