4

サイト上のすべての匿名の内部クラスの質問を通して、これに対する答えを見つけることができないようです.

public void start()
{
    /* Ask the user to login */
    final LoginFrame login;
    login = new LoginFrame(new ActionListener()
    {
        @Override
        public void actionPerformed(final ActionEvent event)
        {
            switch (event.getActionCommand())
            {
                case "login":
                    /* @todo Login the user */
                    String username = login.getUsername();
                    String password = login.getPassword();
            }
        }
    });
    login.display();
}

私のログイン フレームはActionListener. login内からアクセスするにはどうすればよいnew ActionListener()ですか?

現在、エラーが発生しています:

変数ログインが初期化されていない可能性があります。

4

3 に答える 3

1

ActionListenerが作成された後にを割り当てる必要がありますLoginFrame

代入の右側はlogin、コンパイラが指示するように、最初に、またはフィールドが代入される前に評価されます。

リスナーを使用する場合はメソッドを使用する方が一般的でaddあるため、コードを次のように変更します。

private final login = new LoginFrame();

login.addActionListener(
  new ActionListener()
  {
    @Override
    public void actionPerformed(final ActionEvent event)
    {
      switch (event.getActionCommand())
      {
        case "login":
          /* @todo Login the user */
          String username = login.getUsername();
          String password = login.getPassword();
      }        
    }      
  }
);    

login.display();
于 2014-03-27T09:58:52.510 に答える
0

変数loginを初期化しておらず、使用しています。

によって、anonymous class変数を初期化しているので、初期化後に使用できます。この変数を使用する場合は、初期化する必要があります (ただし、クラスnullのメソッドを使用してLoginFrameおり、 をスローする必要があるため、変数を値で初期化しないでくださいNullPointerException)。

于 2014-03-27T09:59:56.663 に答える