-1

我是编程的新手,因为我没有找到解决问题的方法,所以再次发布。我正在编写一个由三个文件组成的简单项目。在主类中,我构建了 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();                 
            }
        });

}

另一个文件没有收到跑步者组合框生成的值

// 进程.java

import statements go here

public class Processes  {

int fullNH;
AlladinLamp lamp;

public Process()  {

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

  ...

}

第二个文件中没有读取变量 fnh。有人可以建议我做错什么吗?提前致谢。

4

1 回答 1

1

编辑:好的。AlladinLamp您在第二个文件的这一行创建一个新的

lamp = new AlladinLamp();

现在,程序立即尝试在这条线上获取 FNH

fullNH = lamp.getFNH();

问题是,如果AlladinLamp是你的主类,那么调用new AlladinLamp()另一个类将创建一个新实例AlladinLamp(一个全新的对象)。然后你试图fnh从那个新的中得到正确的AlladinLamp——它将是空的。

您需要做的是获取现有对象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 回答