WindowLIstener — идентификатор ожидается после токена

Я рефакторинг своего кода на основе совета из моего вопроса CodeReview.SE. https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-game

Исследования:

  1. https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
    Как написать Window Listeners
  2. Синтаксическая ошибка 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. Но я пытаюсь классифицировать каждое заметное действие, загрузку, сохранение, пользовательский интерфейс по отдельности, как часть изучения классов, устойчивости, возможности повторного использования моего кода. Или мне просто не хватает одной скобки или скобки.

Спасибо.


person Mikey Harris    schedule 27.04.2016    source источник


Ответы (1)


Ваш метод SaveGameData.saveGameOnClose(WindowEvent e) требует параметр типа WindowEvent, но вы вызываете его без каких-либо параметров SaveGameData.saveGameOnClose(); и это тоже без реализации какого-либо метода прослушивания

Это должно быть что-то вроде этого

FRAME.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
            SaveGameData.saveGameOnClose(e);
     }

});
person Sanjeev    schedule 27.04.2016
comment
Благодарю вас! Я был близок к тому, чтобы сделать что-то подобное, но путался между этим и классом. Я продолжал пытаться создать метод на основе saveGameOnClose() и знал, что это неправильно. Будет принят в качестве ответа, когда таймер завершится. - person Mikey Harris; 27.04.2016
comment
Рад, что это помогло вам. Получайте удовольствие от кодирования :) - person Sanjeev; 27.04.2016