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 类的构造函数之后被调用......它试图使用该数字。在这里尝试的简单方法是在该 actionPerformed 中插入一个 System.out.println 并在您的 AlladinLamp 和 Processes 构造函数的末尾,并查看事情发生的顺序。

正如其他海报提到的那样,它与包裹无关。如果您未指定 public,则默认可见性是包级别的可见性,因此应该没问题。

忘了提......请记住,Swing 库是一个基于事件的 GUI 库。所以你的 GUI 将首先被构建。直到稍后才会调用该 actionPerformed 方法……一旦设置了整个 UI 并且您从组合框中选择了某些内容。

于 2013-03-27T20:39:45.653 回答