Code quản lý sản phẩm bị lỗi NullPointerException

Mình có bài code qlysp khá hoàn chỉnh nhập dử liệu dc .Nhưng khi mình thử bấm vào 1 catalog trong ds catalog roi bấm new catalog mới thì gặp tình trạng lỗi Nullpointexception ko lấy product lên dc nhưng do catalog này mới tạo chưa có sp.
Tuy nhiên nếu ko bấm vào 1 catalog nào đó trên danh sach thì viêc tao mới diển ra bình thường

đậy là ảnh minh họa :
ảnh
đây là phần code

public class  MainManagerUI  extends  JFrame {
 
private  static JList lstCate 
 public  static ListCategory   *listData* ;
 public  static Category *selectedCate* ;
   public  MainManagerUI(String title)
{
 super (title);
 listData =  new ListCategory();
}
...........
 lstCate* .addListSelectionListener(  new ListSelectionListener() {
@Override
 public  void valueChanged(ListSelectionEvent arg0) {
         // Get the selected  Category from the list.
 //nếu ẩn 2 dòng này thì hết báo loi null point nhưng cũng đồng nghĩa ko lấy dc ds product lện bảng dc
          selectedCate =(Category) lstCate .getSelectedValue();
           showListProductIntoTable();
} });

}

 private  void showListProductIntoTable()
{
dtmProduct.setRowCount(0);
 for  (Product p:  selectedCate .getListPro()) //lỗi gây ra null point nằm ở dong này
{
Vector<String> vec=  new  Vector<String>();
vec.add(p.getProductId());
vec.add(p.getProductName());
dtmProduct.addRow(vec);
} }

 public  static  void updateCateList()
{
 lstCate  .removeAll();
 lstCate .setListData( listData  .getList().toArray());
   lstCate  .updateUI();

 cboCateList .removeAllItems();

 for (Category cate :  listData .getList())
{
 cboCateList  .addItem(cate);
}
}

 private  void doCreateNewCate()
{
CategoryManagerUI cateUI=  new CategoryManagerUI(“Cate information”);
cateUI.doShow();//goi bang nhap ten category
}
  private class  processButtonEvent  implements  ActionListener {

@Override

 public  void  actionPerformed(ActionEvent e) {
Object o=e.getSource();
if (o.equals(btnCateNew))
{ 
doCreateNewCate(); 
}
else if(o.equals(cboCateList))
{        
   doComboboxSelected();     
   }       }

Bác nào có kinh nghiệm giúp với mình nghỉ hết cách mà ko sửa dc

Bạn đã biết dòng nào gây lỗi, cũng được rồi đấy. Nhưng chưa biết cách tránh lỗi.
Lỗi gây ra do selectedCate đang = null.
Bạn có thực sự tránh được khi bên trong phương thức showListProductTable() bạn kiểm tra selectedCate trước khi thực hiện các dòng truy vấn.
Rất dễ, chỉ đơn giản:

private void showListProductTable(){
    if(selectedCate == null){
        return; // không thực hiện khi selectedCate == null
    }
    //...
}

updateCateList() đã làm selectedCate = null. Vì khi bạn xóa các mục của JList thì khi đó sự kiện valueChanged() sẽ xảy ra và getSelectedValue() trả về null.
Tùy theo mục đích mà bạn có thể làm:

  • Khi thêm mới, chọn lại mục đã được chọn trước đó.
  • Khi thêm mới, chọn mục vừa thêm.
2 Likes

mình làm được rùi cám ơn bác!! :sleepy: trùi sửa bao lâu rùi mà không dc hichic!

xin hỏi thệm cái thằng updateUI dùng làm gì trong chương trình vậy . Mình trang nhìu trang web mà nó giải thích sơ sài quá . Không biết nếu bỏ nó thì có ảnh hưởng đến ctrinh không!?

Thử bỏ là biết.
Nó liên quan đến Look And Feel (tương đương với Theme). Khi gọi thì sẽ thay đổi L&F sang L&F hiện tại, bởi vậy, nếu để L&F mặc định thì cũng chẳng thấy có thay đổi gì.

1 Like

trong class này mình còn gặp cái warning JList is a raw type. References to generic type JList should be parameterized
tại
private static JList lstCate;
nếu sửa thành
private static JList<Category> lstCate;
thì ben dưới gặp error The method setListData(Category[]) in the type JList is not applicable for the arguments (Object[])
tại dòng
lstCate.setListData( listData.getList().toArray() );
nhưng nếu cast theo gợi ý
stCate.setListData( (Category[]) listData.getList().toArray() );
thì khi compile nó cho qua có diều lúc run nhập danh sách category là nó quăng exception

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lqlsanpham.Category;

mình cũng ko hiểu ra sao . Tuy nhiên nếu mặc kệ cái warning ở trện thì compile run nhập đều không lỗi . Xin hỏi sửa thế nào để cho nó bỏ cái warning hay để nguyên .

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?