Очень нужна помощь.В Java не долго, так что костылей полно, прошу сильно не пинать). Есть клас Level1State в котором я вызываю saveProp() чтоб занести параметры в файл и lastLoad() чтобы получить параметры
public static GameProps p = new GameProps();
//saveProp
public void saveProp(){
p.save(getHero(), hero.getHealth(), getXposition(), getYposition(),getState(),tileMap.getx(), tileMap.gety());
}
//lastLoad
public void lastLoad()
{
p.load();
tileMap.setPosition((double) p.loadInt().get(3), (double) p.loadInt().get(4));
}
Здесь собственно сам клас который все делает
public class GameProps {
String homeDir = System.getProperty("user.home");
final String settingsFilename = homeDir + File.separator + "mySettings.txt";
final Properties props = new Properties();
String hero_type;
int hero_health;
int hero_position_x;
int hero_position_y;
String game_state;
double tilemap_position_x;
double tilemap_position_y;
public List<String> lines = new ArrayList<>();
public List<Integer> linesInt = new ArrayList<>();
FileOutputStream output;
public void save(String hero_type, int hero_health, int hero_position_x, int hero_position_y,
String game_state, double tilemap_position_x, double tilemap_position_y) {
try {
output = new FileOutputStream(settingsFilename);
} catch (Exception ignore) {
}
try {
props.setProperty("hero_type", hero_type);
props.setProperty("hero_health", Integer.toString(hero_health));
props.setProperty("hero_position_x", Integer.toString(hero_position_x));
props.setProperty("hero_position_y", Integer.toString(hero_position_y));
props.setProperty("game_state", game_state);
props.setProperty("tilemap_position_x", Double.toString(tilemap_position_x));
props.setProperty("tilemap_position_y", Double.toString(tilemap_position_y));
} catch (NumberFormatException e) {
this.hero_type = "Drago";
this.hero_health = 2;
this.hero_position_x = 10;
this.hero_position_y = 10;
this.game_state = "Level1State";
this.tilemap_position_x = 0.0;
this.tilemap_position_y = 0.0;
}
try {
props.store(output, "Saved settings");
output.close();
} catch (IOException ex) {
}
}
public void load() {
try {
FileInputStream input = new FileInputStream(settingsFilename);
props.load(input);
} catch (Exception ignore) {
}
hero_health = Integer.parseInt(props.getProperty("hero_health", Integer.toString(hero_health)));
hero_type = props.getProperty("hero_type", hero_type);
hero_position_x = Integer.parseInt(props.getProperty("hero_position_x", Integer.toString(hero_position_x)));
hero_position_y = Integer.parseInt(props.getProperty("hero_position_y", Integer.toString(hero_position_y)));
game_state = props.getProperty("game_state", game_state);
tilemap_position_x = Double.parseDouble(props.getProperty("tilemap_position_x", Double.toString(tilemap_position_x)));
tilemap_position_y = Double.parseDouble(props.getProperty("tilemap_position_y", Double.toString(tilemap_position_y)));
Collections.addAll(lines, hero_type, game_state);
Collections.addAll(linesInt, hero_health, hero_position_x, hero_position_y,
(int) tilemap_position_x, (int) tilemap_position_y);
System.out.println(linesInt.get(0));
}
public List<Integer> loadInt() {
return linesInt;
}
public List<String> loadString() {
return lines;
}
}
Когда запускаю прогу, последние сохраненные параметры загружаются, все ок, но они сохраняются только когда прога завершает свою роботу,а когда хочу сохранить во время эксплуатации то не получается.
проблема в том, что в методе Save вы сначала сохраняете состояние props, потом меняете состояние props
public void save(String hero_type, int hero_health, int hero_position_x, int hero_position_y,
String game_state, double tilemap_position_x, double tilemap_position_y) {
try {
FileOutputStream output = new FileOutputStream(settingsFilename);
props.store(output, "Saved settings"); // **вот тут вы сохраняете в файл**
} catch (Exception ignore) {
}
// **дальше меняйте props**
try {
props.setProperty("hero_type", hero_type);
props.setProperty("hero_health", Integer.toString(hero_health));
props.setProperty("hero_position_x", Integer.toString(hero_position_x));
props.setProperty("hero_position_y", Integer.toString(hero_position_y));
props.setProperty("game_state", game_state);
props.setProperty("tilemap_position_x", Double.toString(tilemap_position_x));
props.setProperty("tilemap_position_y", Double.toString(tilemap_position_y));
} catch (NumberFormatException e) {
this.hero_type = "Drago";
this.hero_health = 2;
this.hero_position_x = 10;
this.hero_position_y = 10;
this.game_state = "Level1State";
this.tilemap_position_x = 0.0;
this.tilemap_position_y = 0.0;
}
// метод завершается и последнее сохранение не пишем в файл.
}
Вам нужно кусок props.store(output, "Saved settings");
выполнить в конце метода save
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Приводится на хабре в статье библиотека Apache Commons Logging (не знаю смысл этой библиотеки, не юзал) и комментарий:
Сегодня приступил к изучению многопоточности на java, не понимаю, почему программа в некоторых случаях выдает корректный результат, а в остальных...