Я рефакторинг своего кода на основе совета из моего вопроса CodeReview.SE. https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-game
Исследования:
- https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
Как написать Window Listeners - Синтаксическая ошибка Java в токене... Идентификатор ожидается после этот токен
Большинство других вопросов, связанных с SO, похожи на этот. Я не могу найти вопрос с этой ситуацией.
Я знаю, что вам нужно создать метод для вызова в другом месте. Код doSomething не может просто сидеть на уровне класса.
Ошибка:
я столкнулся с ошибкой
Синтаксическая ошибка в токене "saveGameOnClose", идентификатор ожидается после этого токена
в пределах
FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
моего основного класса.
Основной класс:
public Game() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
NewGameMessage.LoadNewGameMessage();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace(); }
catch (IllegalAccessException ex) {
ex.printStackTrace(); }
catch (InstantiationException ex) {
ex.printStackTrace(); }
catch (ClassNotFoundException ex) {
ex.printStackTrace(); }
FRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FRAME.getContentPane().add(new addComponentsToPane());
FRAME.setSize(300, 500);
FRAME.setLocationRelativeTo(null);
FRAME.setVisible(true);
FRAME.setResizable(false);
FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
}
});
}
Класс SaveGameData:
public class SaveGameData {
// Game.FRAME.addWindowListener(new WindowAdapter() {
static void saveGameOnClose(WindowEvent e) {
BufferedWriter writerOut = null;
try {
writerOut = new BufferedWriter(new FileWriter("res/saved_game_data.txt"));
writerOut.write(String.valueOf(Game.biDamageOutput) + "\r\n" +
String.valueOf(Game.biPoints) + "\r\n" +
String.valueOf(Game.biNewPoints) + "\r\n" +
String.valueOf(Game.biSpentPoints) + "\r\n" +
String.valueOf(Game.biKnifeCount) + "\r\n" +
String.valueOf(Game.biPistolCount) + "\r\n" +
String.valueOf(Game.biShotgunCount) + "\r\n" +
String.valueOf(Game.biRifleCount) + "\r\n" +
String.valueOf(Game.biRLauncherCount) + "\r\n" +
String.valueOf(Game.intTotalClicks));
writerOut.close();
} catch (Exception e1) {
System.err.println("Error: " + e1.getMessage());
}
};
}
Личное мнение о проблеме:
Я неправильно пишу Window Listener. Но я пытаюсь классифицировать каждое заметное действие, загрузку, сохранение, пользовательский интерфейс по отдельности, как часть изучения классов, устойчивости, возможности повторного использования моего кода. Или мне просто не хватает одной скобки или скобки.
Спасибо.