Загрузка свойств из файла, ошибка: исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException - PullRequest
0 голосов
/ 14 октября 2019

Я создал игру тральщика и сумел сохранить важные переменные в файл .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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...