2016-04-27 14 views
1

私はCodeReview.SEの質問のアドバイスに基づいて自分のコードをリファクタリングしています。 https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-gameWindowLIstener - トークン後に予想される識別子

研究:SOの質問はこれに類似している関係づけ

  • Java syntax error on token.... Identifier expected after this token
    他のほとんどのウィンドウリスナーを作成する方法

    1. https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
      。私はこの状況で質問を見つけることができません。

    他の場所で呼び出す方法を作成する必要があることはわかっています。 doSomethingコードは、単にクラスレベルに座ることはできません。

    エラー:
    は私が私のメインクラスの

    FRAME.addWindowListener(new WindowAdapter() { 
            SaveGameData.saveGameOnClose(); 
           }); 
    

    内のエラー

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

    に遭遇しています。

    メインクラス:

    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()); 
           } 
         }; 
    } 
    

    個人的には問題に考えた:

    私は間違ってウィンドウリスナーを書いています。しかし、クラス、持続可能性、コードの再利用性についてもっと学ぶの一環として、それぞれの注目すべきアクションをクラス分けし、読み込み、保存、UIごとにクラス分けしようとしています。それとも、括弧や括弧で囲まれていないかもしれません。

    ありがとうございました。ありがとう

  • 答えて

    1

    あなたの方法SaveGameData.saveGameOnClose(WindowEvent e)はタイプWindowEventのパラメータを必要としていますが、任意のパラメータSaveGameData.saveGameOnClose();せずにそれを呼び出していると、あまりにもすべてのリスナーメソッド

    を実装することなく、それはこの

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

    のようなものでなければならないこと!私はこれに近いものでしたが、それとクラスの間で混乱していました。私はsaveGameOnClose()のメソッドを作成しようとし続け、それが正しくないことを知っていました。 タイマー終了時に回答として受け入れます。 –

    +0

    それはあなたを助けてくれてうれしいです。楽しいコーディングを持っている:) – Sanjeev

    関連する問題