2013-09-21 4 views
0

아래 코드를 실행할 때 약간의 문제가 있습니다. 이 코드는 GUI 화면의 버튼을 누를 때 사용됩니다. 기본적으로이 버튼의 기능은 2 개의 텍스트 필드에 입력 된 텍스트를 읽고, 2에서 3 번째 값을 도출하고, 2 차원 배열을 사용하여 GUI 화면의 테이블에 모든 3을 한 행에 저장하는 것입니다. 상기 방법은 내부 addItem를 5 줄을 실행할 때2D 객체가 nullpointerexception을 제공합니까?

하지만, 내가 NullPointerException이 얻을(). saleData는 테이블에있는 데이터가있는 2D 배열입니다. 제가 테이블에 행을 추가해야하고 난 saleData = 온도를 확인하기 때문에이 saleData 개체보다 1 열 이상으로 온도 [] [] 객체를 인스턴스화있다. 이 코드는 OOP를 사용하여 GUI가 작동하는 별도의 클래스를 만들기 전에 Gui 클래스에서와 같이 작동합니다. nullpointer 예외는 temp 객체를 참조합니다. temp의 값을 출력했기 때문에 null을 알고 있기 때문에 이것을 알고 있습니다.

누구에게 아이디어가 있습니까? 사전에 감사합니다.

public void addItem() { 
    int len = saleData.length + 1; 
    Object[][] temp = new Object[len][3]; 
    for (int k = 0; k < saleData.length; k++) { 
     for (int i = 0; i < 3; i++) { 
      temp[k][i] = ((DefaultTableModel) table.getModel()).getValueAt(k, i); 
     } 
    } 
    tblContainer.removeComponent(table); 
    try { 
     int qty = Integer.parseInt(txtQty.getText()); 
     String item = (String) items.getSelectedItem(); 
     String sql = "Select Sell_price from stockInfo where parts like '" + item + "'"; 
     double total = 0; 
     if (saleData.length != 1) { 
      for (int i = 0; i < saleData.length; i++) { 
       String sql2 = "Select sell_price from stockinfo where parts like '" + temp[i][1].toString() + "'"; 
       try { 
        System.out.println("Check 0"); 
        pst = conn.prepareStatement(sql2); 
        System.out.println("Check 1"); 
        rs = pst.executeQuery(); 
        System.out.println("Check 2"); 
        while (rs.next()) { 
         System.out.println("Check 3"); 
         String qt = temp[i][0].toString(); 
         temp[i][2] = Double.parseDouble(rs.getString("sell_price")) * Integer.parseInt(qt); 
         System.out.println("Check 4"); 
        } 
       } catch (Exception e) { 
        Dialog.show("Error", "Error 1: " + e, "OK", null); 
       } 
      } 
     } 
     try { 
      pst = conn.prepareStatement(sql); 
      rs = pst.executeQuery(); 
      while (rs.next()) { 
       double price = Double.parseDouble(rs.getString("Sell_Price")); 
       total = qty * price; 
       try { 
        for (int m = 0; m < saleData.length; m++) { 
         for (int n = 0; n < 3; n++) { 
          ((DefaultTableModel) table.getModel()).setValueAt(m, n, temp[m][n]); 
         } 
        } 
        temp[saleData.length][0] = qty; 
        temp[saleData.length][1] = item; 
        temp[saleData.length][2] = total; 
        saleData = temp; 
        table = new Table(new DefaultTableModel(saleColumns, saleData, true)); 
        tblContainer.addComponent(table); 
        ((TableLayout) table.getLayout()).setGrowHorizontally(true); 
        saleForm.revalidate(); 

       } catch (NullPointerException e) { 
       } 
      } 
     } catch (SQLException e) { 
      Dialog.show("Error", "SQL Error Record Sale", "OK", null); 
     } 
    } catch (NumberFormatException nfe) { 
     Dialog.show("Error", "Please enter a valid quantity", "OK", null); 
    } 
} 

답변

1

임시 배열을 null로 설정할 수 없습니다. 방금 만들었습니다.

temp[k][i]은 null이 되야합니다.

temp의 크기가 충분히 크지 않을 경우, 당신은 ArrayIndexOutOfBoundsException

그래서이 예를 들어 오류가 그 라인에서 유래 경우 (널 (null)로 얻을 수있는 두 가지 나뭇잎, 그리고 얻을 것

  • table
  • table.getModel()
,369 : getValueAt(k,i)의 내측)로부터

...

디버거를 사용하여, 그것은 여러분의 인생을 더 쉽게 만드는 것
관련 문제