gpt4 book ai didi

java - 从 HashMap 中检索记录

转载 作者:行者123 更新时间:2023-12-02 06:46:51 25 4
gpt4 key购买 nike

我有两份表格,一份用于注册,另一份用于搜索记录、删除等。在注册表中,我将注册详细信息放入一个对象中,然后将其存储在 HashMap 中。在第二种形式中,我访问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();
}

}

这是 map 类(所有 map 都在这个类中):

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

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

作为非静态字段。因此,每当您创建一个 new Maps() 时,它都会在内部创建一个new 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);

记住-

private static objects are not garbage collected ,除非持有者类别获得 GCd。因此,应该不时地从 map 上手动删除不需要的项目。

关于java - 从 HashMap 中检索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com