-1

私はプログラミングの初心者であり、問​​題の解決策が見つからないため、これを再度投稿しています。私は、3 つのファイルからなる単純なプロジェクトを作成しています。メイン クラスでは、GUI を作成します。

// AlladinLamp.java

import statements go here

public class AlladinLamp  {

   int fnh;
   JComboBox runners;
   other variables go here

   actionListener and other methods go here, including

   public int getFNH()  { return fnh; }

   ActionListener runnersActionListener = new ActionListener()  {
          @Override
          public void actionPerformed( ActionEvent e ) {
             String  runnersNumber = ( String )runners.getSelectedItem();
             fnh = Integer.parseInt( runnersNumber );          
             hNam = new String[ fnh ];
             hNum = new int[ fnh ];
             hVal = new int[ fnh ];
             jtxt = new JTextField[ fnh ];
             reducedFNH = reduce( fnh );                
           }
   };



   public AlladinLamp()  {

      gui built 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( runnersActionListener );

      ...
}

public static void main( String args[] )  {

   SwingUtilities.invokeLater( new Runnable()  {
            @Override
            public void run()  {
                AlladinLamp lamp = new AlladinLamp();                 
            }
        });

}

他のファイルは、ランナー コンボボックスによって生成された値を受け取っていません

// Process.java

import statements go here

public class Processes  {

int fullNH;
AlladinLamp lamp;

public Process()  {

  lamp = new AlladinLamp();
  fullNH = lamp.getFNH();

  ...

}

変数 fnh が 2 番目のファイルで読み取られていません。誰かが私が間違っている可能性があることを教えてもらえますか? 前もって感謝します。

4

1 に答える 1

1

編集:わかりました。AlladinLamp2番目のファイルのこの行に新しいを作成します

lamp = new AlladinLamp();

ここで、プログラムはすぐにこの行で FNH を取得しようとします

fullNH = lamp.getFNH();

問題は、AlladinLampがメイン クラスの場合、別のクラスを呼び出すと(まったく新しいオブジェクト)new AlladinLamp()の新しいインスタンスが作成されることです。AlladinLamp次にfnh、その新しいものからすぐに取得しようとしますAlladinLamp-それはnullになります。

あなたがする必要があるのは、既存のオブジェクトAlladinLampを取得してから呼び出すgetFNH()ことです。

このようなクラスProcessesから始めている場合AlladinLamp

new Processes();

次に、Processesコンストラクターを次のように変更します

public class Processes {

    AlladinLamp lamp;
    int fullNH;    

    public Processes(AlladinLamp al) {
        lamp = al;
        fullNH = lamp.getFNH();
    }
}

クラスから開始するときは、次のように開始Processesします。AlladinLamp

new Processes(this);
于 2013-03-28T01:40:16.193 に答える