2017-10-31 11 views
0

動的な項目をObject [] []に追加しようとしていますが、配列インデックスが範囲外の例外をスローします。私はあなたが私にこれを行うためのアイデアを提案してもらえ、JavaのDataModelに動的データを追加できませんでした

private static final int CHECK_COL = 1; 
    private final Object[][] DATA = {}; 
    private final String[] COLUMNS = { "Customer", "Selected Customer" }; 
    private DataModel dataModel; 
    private JTable table; 
    private DefaultListSelectionModel selectionModel; 

ArrayList<String> items = new ArrayList<String>(); 
     JSONParser parser = new JSONParser(); 
     try { 

      Object obj = null; 
      try { 
       obj = parser.parse(new FileReader(new File("json/customer_list.json"))); 
      } catch (org.json.simple.parser.ParseException e1) { 
       e1.printStackTrace(); 
      } 
      JSONObject jsonObject = (JSONObject) obj; 
      JSONArray listOfBranches = (JSONArray) jsonObject.get("customers"); 
      for (int i = 0; i < listOfBranches.size(); i++) { 
       JSONObject item = (JSONObject)listOfBranches.get(i); 
       Set keys = item.keySet(); 
       Iterator a = keys.iterator(); 
       while(a.hasNext()) { 
        String key = (String)a.next(); 
        System.out.print("key : "+key); 
        items.add(key); 
       } 
       System.out.println("Customer :" + listOfBranches.get(i)+"\n item "+item); 
      } 

      System.out.println("items array size :" + items.size()); 

      String[] customerArr = new String[items.size()]; 
      customerArr = items.toArray(customerArr); 

      System.out.println("customerArr array size :" + customerArr.length); 
      for (int i = 0; i < customerArr.length; i++) { 
       System.out.println("customerArr array size :" + customerArr.length); 
        DATA[i] = new Object[]{customerArr[i], Boolean.FALSE}; 
        dataModel = new DataModel(DATA, COLUMNS); 
        table = new JTable(dataModel); 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

は行の下、この中の結合した例外のうち、配列のインデックスを取得、これを行うには

DATA[i] = new Object[]{customerArr[i], Boolean.FALSE};

を以下のコードを使用していますか?前もって感謝します。

+0

DATA要素の長さをデバッグして参照してください。 DATAの長さはcustomerArrの長さと異なる場合があります。 – user218046

+0

@ user218046アイテムとcustomerArrの長さが同じです。しかし、私はデータ要素の長さについてはわからないし、私はまだその長さを初期化していないと思う。どうやったらそれを教えてください。 – Rotomac17

答えて

0

あなたが指摘したように、あなたが取得している範囲の例外のうち、インデックスが、あるため、次の行に:

​​

ここでの問題は、DATA配列の最初の次元が初期化されなかったし、そう容量がゼロである。これを解決するには、適切な寸法を使用して2次元配列を初期化:

DATA = new Object[customerArr.length][]; 

をまた、あなたはあなたのDATA 2Dオブジェクト配列の各にのみ単一の文字列を代入しています。おそらくこれはあなたが意図したものではありませんが、私はこれらの行に沿った割り当てを期待していたでしょう:

DATA[i] = // some 1D array 
関連する問題