Привет, ребята, я новичок в разработке, на этом форуме и хотел создать зеркало для входа. Мне пришлось использовать BlueJ из-за моего учителя, и да ... это, наверное, не один из лучших способов научиться писать, я думаю (версия, которую мы должны использовать в школе, даже не показывает ошибок перед компиляцией) (я лично начал писать с Eclipse ).
Моя проблема в том, что вывод, который я получаю от моего hasMapReader, просто равен нулю после того, как я «сохранил» HashMap в новом файле и «записал» его в другой HashMap.
HashMap<String, Serializable> userAcc = new HashMap<String, Serializable>();
userAcc.put(name, value);
otherClass.hashMapSaver(userAcc, hashMapFile = new java.io.File(location));
public HashMap<String, Serializable> hashMapSaver(HashMap<String, Serializable> map, java.io.File file){
try{
FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(map);
s.close();
f.close();
}catch (IOException e) {
e.printStackTrace();
}
return map;
}
HashMap<String, Serializable> userAcc2 = new HashMap<String, Serializable>();
otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));
(userAcc2 находится в третьем «основном» классе) затем hashMapReader в другом классе:
public HashMap<String, Serializable> hashMapReader(HashMap<String, Serializable> map2, java.io.File file){
try{
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
map2 = (HashMap<String, Serializable>) s.readObject();
f.close();
s.close();
}catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException c) {
c.printStackTrace();
return null;
}
return map2;
}
System.out.println("userAcc2: " + userAcc2.get(name));
System.out.println("HashMap Keys: " + userAcc2.keySet());
но консоль просто распечатывает:
userAcc2: null; Ключи HashMap: []
Другая проблема, я думаю, заключается в том, что файл может заменяться каждый раз, когда я запускаю эту программу.
Я пытаюсь решить это почти неделю.
Спасибо :),
Прочтите ericlippert.com/2014/03/05/how-to-debug-small-programs, чтобы узнать, как отлаживать код.




Ваш map2 является аргументом в hashMapReader, но в этом методе вы выполняете следующее назначение:
map2 = (HashMap<String, Serializable>) s.readObject();
Это обновляет переменную map2, но не объект, на который ссылается map2. Поскольку hashMapReader возвращает map2, следующее изменение решит вашу проблему:
userAcc2 = otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));
В качестве побочного примечания аргумент map2 совершенно не нужен, поскольку вы все равно не используете передаваемый объект. Что-нибудь чуть чище было бы:
public HashMap<String, Serializable> hashMapReader(java.io.File file){
HashMap<String, Serializable> map2 = null;
try{
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
map2 = (HashMap<String, Serializable>) s.readObject();
f.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException c) {
c.printStackTrace();
return null;
}
return map2;
}
...
userAcc2 = otherClass.hashMapReader(new java.io.File(hashMapFile));
Вы вводите null в свои блоки catch. (1) Возникает ли исключение? (2) Действительно ли вызывается метод? И где переменные, на которые есть ссылки в создаваемых строках печати?