0

登録用のフォームと、レコードの検索、削除など用のフォームの 2 つのフォームがあります。登録フォームで、登録の詳細をオブジェクトに入れ、それをハッシュマップに保存します。2 番目の形式では、ハッシュマップにアクセスして削除し、保存された ID (キー) に従ってレコードを検索します。

私の問題は、レコードを保存して 2​​ 番目のフォーム (ハッシュマップにアクセス) からアクセスすると、null ポインター例外が発生することです。(検索したキーにレコードが保存されていても、nullポインタ例外が発生します)

これが私がやったことです:

登録フォームコード:

 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();
       }

    }                                           

Maps クラスは次のとおりです (すべてのマップはこのクラスにあります)。

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);
    }




}

レコードを検索するために2番目のフォームで使用するコードは次のとおりです:-

        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());

    }     

ここで何が問題になっているようですか?

お時間をいただきありがとうございます。

4

1 に答える 1

2

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);
  }

}

このように、1 つのフォームに項目を追加できます。

Maps.setMemberMap(memberid, newMember);

そして、他のフォームから同じ値を取得します

Maps.getMemberMap().get(memberID);

覚えて-

ホルダー クラスが GCd を取得しない限り、プライベートな静的オブジェクトはガベージ コレクションされません。そのため、不要なアイテムは時々マップから手動で削除する必要があります。

于 2013-08-31T12:32:42.420 に答える