1

私は私のコードの断片を含めています。変数 fnh がクラス スコープで宣言されました (クラス定義の直後)。それでも、最後のステートメントで印刷することはできません。actionPerformed メソッド内に配置された場合、変数の値は出力されますが、その外部には出力されません。何が問題になる可能性がありますか?迅速な提案をいただければ幸いです。

public class Lamp  {
   int fnh;
   Lamp()  {
     // More code here

  String[] numberOfRunners = { "8", "9", "10", "11", "12",
                                "13", "14", "15", "16", "17",
                                "18", "19", "20", "21", "22" };

   runners = new JComboBox( numberOfRunners );
   runners.setMaximumRowCount(5);        
   runners.addActionListener( new ActionListener() {
        @Override
        public void actionPerformed( ActionEvent ae ) {
           String  runnersNumber = ( String )runners.getSelectedItem();
           fnh = Integer.parseInt( runnersNumber );           
           reducedFNH = reduce( fnh );
       }}
   );     
   middle.add( runners );
   System.out.println( fnh );

    // More code here

}

// その他のコード

クラスの終わり

4

3 に答える 3

0

最後に欠け}ています。

私が今までに与えた最も簡単な答え:-D

于 2013-03-07T08:27:53.653 に答える
0

問題は、出力したい時点で fnh の値がまだ null であることです。初めて値を取得するのは、actionperfomed メソッドです。

于 2013-03-07T08:29:29.163 に答える
0

actionListener を登録し、その後出力しますfnh。アクションが実行されなかったため、まだ変更されていないため、リスナーは呼び出されませんでした。

次のようにすると理解しやすいかもしれません。

public class Lamp  {
   int fnh;
   ...

   private ActionListener actionListener = new ActionListener() {
       @Override
       public void actionPerformed( ActionEvent ae ) {
          // This is only called, when user performs an action on runners
          String  runnersNumber = ( String )runners.getSelectedItem();
          fnh = Integer.parseInt( runnersNumber );
      }};

    public Lamp()  {
        ...
        runners = new JComboBox(numberOfRunners);
        runners.addActionListener(actionListener);
        System.out.println( fnh );
    }
}
于 2013-03-07T08:41:47.320 に答える