0

簡単に克服できると確信している問題に行き詰まりました。メイン クラスは、GUI を構築するために使用されます。

// AlladinLamp.java

package alladinlamp;


import javax.swing.table.*; 
import javax.swing.*; 
import java.awt.*;

class AlladinLamp  {

int fnh;
ComboBox runners;

[ ...code ]

AlladinLamp()  {

[ ...code ]

runners = new JComboBox( numberOfRunners );
       runners.setMaximumRowCount(5); 
       runners.addActionListener( new ActionListener() {   
          @Override
          public void actionPerformed( ActionEvent e ) {
             String  runnersNumber = ( String )runners.getSelectedItem();
             fnh = Integer.parseInt( runnersNumber ); 
}

[ ...code ]

public int getFNH() { return fnh; }

[ ...code ]

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

}

別のファイルから fnh を読み込めるようにしたい

package alladinlamp; 

Class Processes  {

   int fullNH;
   AlladinLamp lamp;



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

[ ...code ]

}

[ ...code ]

}

しかし、それは起こっていません ( fnh = null )。ただし、整数は作成されたのと同じファイルで読み取られます。私は何を間違っていますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

ここで起こっているのは、関心のある変数を設定する AlladinLamp の actionPerformed() メソッドが、 Processes クラスのコンストラクターのに呼び出されていることだと思います...その番号を使用しようとしています。ここで試す簡単な方法は、System.out.println をその actionPerformed に挿入し、AlladinLamp および Processes コンストラクターの最後に挿入して、物事が起こっている順序を確認することです。

他のポスターが言及しているように、パッケージとは関係ありません。public を指定しない場合のデフォルトの可視性はパッケージ レベルの可視性であるため、そのままで問題ありません。

言い忘れました....Swing ライブラリはイベントベースの GUI ライブラリであることを思い出してください。したがって、GUI が最初に構築されます。その actionPerformed メソッドは後で呼び出されることはありません... UI 全体が設定され、コンボボックスから何かが選択されると。

于 2013-03-27T20:39:45.653 に答える