Я создал игру тральщика и сумел сохранить важные переменные в файл .properties, но теперь у меня возникли проблемы с их перезагрузкой. Когда я пытаюсь загрузить свойства, в командной строке появляется следующее сообщение об исключении:
Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException в java.base / java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:936) в java.base / java.util.Properties.getProperty (Properties.java:1104) в akna.loadGame (акк).java: 446) at akna.actionPerformed (akna.java:507)
... и это продолжается для нескольких строк.
Если язапустить игру и создать сохраненный игровой файл во время игры, я могу перезагрузить его, но не другие ранее сохраненные файлы. Можете ли вы помочь мне, что я скучаю? В чем источник проблемы? Код относительно длинный, поэтому я показываю только соответствующие строки:
Вот метод сохранения текущего состояния игры:
public void saveGame(int[][] n, boolean[][] cellvisible, int livesN, long t1, Properties p) {
String file_name = (String)JOptionPane.showInputDialog(null, "Enter the name of the saved file: ", "Save game", JOptionPane.YES_NO_OPTION, saveicon, null, null);
String lV = Integer.toString(livesN);
String tV = Long.toString(t1);
String prgV = Integer.toString(prg);
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
nN[i][j] = nNs.concat(Integer.toString(i)).concat(Integer.toString(j));
nV[i][j] = Integer.toString(n[i][j]);
cvN[i][j] = cvNs.concat(Integer.toString(i)).concat(Integer.toString(j));
cvV[i][j] = String.valueOf(cellvisible[i][j]);
fN[i][j] = fNs.concat(Integer.toString(i)).concat(Integer.toString(j));
fV[i][j] = String.valueOf(flag[i][j]);
p.setProperty(nN[i][j], nV[i][j]);
p.setProperty(cvN[i][j], cvV[i][j]);
p.setProperty(fN[i][j], fV[i][j]);
}
}
p.setProperty(lN, lV);
p.setProperty(tN, tV);
p.setProperty(prgN, prgV);
try {
FileWriter fw = new FileWriter(file_name);
p.store(fw, "saved properties");
fw.close();
}
catch (IOException e) {}
}
А вот метод, используемый для загрузки свойств из файла:
public void loadGame(int[][] n, boolean[][] cellvisible, int livesN, long t1, Properties p) {
String file_name = (String)JOptionPane.showInputDialog(null, "Enter the name of the file to be loaded: ", "Load game", JOptionPane.PLAIN_MESSAGE, openicon, null, null);
try {
p.clear();
FileReader fr = new FileReader(file_name);
p.load(fr);
}
catch (IOException ioe) {}
livesN = Integer.parseInt(p.getProperty(lN));
t1 = Long.parseLong(p.getProperty(tN));
prg = Integer.parseInt(p.getProperty(prgN));
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
n[i][j] = Integer.parseInt(p.getProperty(nN[i][j]));
cellvisible[i][j] = Boolean.parseBoolean(p.getProperty(cvN[i][j]));
flag[i][j] = Boolean.parseBoolean(p.getProperty(fN[i][j]));
}
}
check.setText(Integer.toString(livesN));
flagN = flagChecker(flagN);
flagsNumber.setText(Integer.toString(flagN));
prg = progressChecker(prg);
pb.setValue(prg);
switch (livesN) {
case 3:
h3.setIcon(heart);
h2.setIcon(heart);
h1.setIcon(heart);
break;
case 2:
h3.setIcon(null);
h2.setIcon(heart);
h1.setIcon(heart);
break;
case 1:
h2.setIcon(null);
h1.setIcon(heart);
break;
case 0:
h1.setIcon(null);
break;
}
canvas.repaint();
}