簡體   English   中英

從散列映射中檢索記錄

[英]Retrieving records from a hashmap

我有2個表格,一個表格用於登記,另一個表格用於搜索記錄,刪除等。 在注冊表單中,我將注冊詳細信息放入對象中,然后將其存儲在哈希映射中。 在第二種形式中,我訪問要刪除的hashmap,根據id保存(Key)搜索記錄。

我的問題是當我保存記錄並從第二種形式訪問它(訪問hashmap)時,我得到空指針異常。 (即使我將一條記錄保存到搜索到的密鑰,我也會得到空指針異常)

這就是我所做的:

登記表格代碼:

 Maps storage=new Maps();
 private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {                                            
       try{
       String firstName=txtFirstName.getText();
       String initials=txtInitials.getText();
       String birthDay=cmbBirthDay.getSelectedItem().toString();
       String birthMonth=cmbBirthMonth.getSelectedItem().toString();
       String birthYear=txtBirthYear.getText();
       String Gender=cmbGender.getSelectedItem().toString();
       String address=txtAddress.getText();
       String tele=txtTele.getText();
       String membershipType="";
       String paymentType="";
       String memberid=txtMemberId.getText();

       if(rbPlatinum.isSelected());{
           membershipType=rbPlatinum.getText();
       }


        if(rbGold.isSelected());
        {
          membershipType=rbGold.getText();
        }

        if(rbSilver.isSelected());
        {
            membershipType=rbSilver.getText();
        }

        if(rbAnually.isSelected());{
            paymentType=rbAnually.getText();
        }
       if(rbSemi.isSelected());{
            paymentType=rbSemi.getText();
        }

       if(rbMonthly.isSelected());{
            paymentType=rbMonthly.getText();
        }

       Members newMember=new   Members(firstName,initials,birthDay,birthMonth,birthYear,Gender,memberid,address,tele,membershipType,paymentType);


     storage.setMemberMap(memberid, newMember);


       JOptionPane.showMessageDialog(frame,"Successfully Registered");
       }catch(Exception e){
           JOptionPane.showMessageDialog(frame,"ERROR!");
           e.getStackTrace();
       }

    }                                           

這是地圖類(所有地圖都在這個類中):

public class Maps {


public Maps(){}


 Map<String,Members> memberMap=new HashMap();




    //returns the memberMap 
    public Map<String, Members> getMemberMap() {
        return memberMap;
    }

    //add items to map
    public void setMemberMap(String key,Members object) {
       memberMap.put(key,object);
    }




}

這是我用第二種形式搜索記錄的代碼: -

        Maps storage=new Maps();    
    private void btnSearchMemberActionPerformed(java.awt.event.ActionEvent evt) {                                                


       String  memberID=txtSearchId.getText();
      //get the record and display
      txtArea.setText(storage.getMemberMap().get(memberID).toString());

    }     

這里似乎有什么問題?

感謝您的時間。

您正在創建Maps storage=new Maps(); 在兩種形式中。 Maps

Map<String,Members> memberMap=new HashMap();

作為非靜態場。 因此,無論何時創建new Maps()它都會在里面創建一個新的 memberMap

另一種方法是將memberMap作為靜態(共享變量)並為它們提供靜態訪問方法

public class Maps {

  private static Map<String,Members> memberMap=new HashMap<>();

  public static Map<String, Members> getMemberMap() {
        return memberMap;
  }


  public static void setMemberMap(String key,Members object) {
      memberMap.put(key,object);
  }

}

通過這種方式,您可以在一個表單中添加項目

Maps.setMemberMap(memberid, newMember);

並從其他形式獲得相同的價值

Maps.getMemberMap().get(memberID);

記得-

除非持有者類獲得GCd,否則不會對私有靜態對象進行垃圾回收 因此,應不時地從地圖中手動刪除不需要的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM