У меня есть 2 формы, одна форма для регистрации и другая форма для поиска записей, удаления и т. Д. В регистрационной форме я помещаю данные регистрации в объект, а затем сохраняю его в хэш-карте. Во второй форме я получаю доступ к хэшмапу для удаления, выполняет поиск записей в соответствии с сохраненным идентификатором (ключ).Извлечение записей из 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());
}
В чем проблема?
Спасибо за ваше время.
Я не понимаю, почему вы дважды создаете 'хранилище'? – varnie
Второй экземпляр находится в другой форме. (Вторая форма) –
это неправильно. если я правильно понял вашу проблему, вы хотите, чтобы ваш объект (карта) был доступен глобально через все ваши формы. Таким образом, должен быть один экземпляр этого. Что касается вашей проблемы: map возвращает 'null', если нет такого элемента с ключом' memberID', который вы пытаетесь стягивать. Вызов 'toString()' on null вызывает это исключение. – varnie