2016-04-27 3 views
1

Я пересматриваю свой код на основании моего вопроса CodeReview.SE. https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-gameWindowLIstener - Идентификатор, ожидаемый после токена

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

  1. https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
    Как написать Слушателей Window
  2. Java syntax error on token.... Identifier expected after this token
    Большинство других Relatable SO вопросы похожи на это. Я не могу найти вопрос в этой ситуации.

Я знаю, что вам нужно создать метод вызова в другом месте. Код doSomething не может просто сидеть на уровне класса.

Ошибка:
Я встретив ошибку

Syntax error on token "saveGameOnClose", Identifier expected after this token

в

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 неправильно. Но я пытаюсь классифицировать каждое заметное действие, загрузку, сохранение, пользовательский интерфейс, индивидуально, как часть обучения больше о классах, устойчивости, повторного использования моего кода. Или мне просто не хватает одной скобки или скобки.

Спасибо.

ответ

1

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

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

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

}); 
+0

Спасибо! Я был близок к тому, чтобы делать что-то подобное, но путал себя между ним и классом. Я продолжал пытаться создать метод saveGameOnClose() и знал, что это неправильно. Будет приниматься как ответ, когда таймер сделан. –

+0

Рад, что это вам помогло. Получайте удовольствие от кодирования :) – Sanjeev

 Смежные вопросы

  • Нет связанных вопросов^_^