2013-03-27 96 views
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();     
      } 
     }); 

} 

我希望能够从另一个文件

package alladinlamp; 

Class Processes { 

    int fullNH; 
    AlladinLamp lamp; 



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

[ ...code ] 

} 

[ ...code ] 

} 

阅读FNH但it's没有发生(fnh = null)。该整数是在它创建的同一个文件中读取的。我究竟做错了什么?任何帮助将不胜感激。

回答

0

我怀疑这里发生了什么是的actionPerformed()在AlladinLamp方法,它设置变量你有兴趣,正在构造为您的工艺类......这是尝试使用后调用数。这里很容易尝试的是在该actionPerformed中插入System.out.println,并在AlladinLamp和Processes构造函数的末尾插入System.out.println,并查看事件发生的顺序。

与其他海报提到的包无关。如果您不指定公开,则默认可见性是包级别可见性,因此应该没问题。

忘了提及....请记住,Swing库是一个基于事件的GUI库。所以你的GUI将首先被构建。该actionPerformed方法将不会被调用,直到以后...一旦你的整个用户界面设置,你已经从组合框中选择了一些。

+0

嗨,我把这些陈述你问我。当我将它放置在Process类的构造函数中时,我没有输出。这好像与主要班级完全没有关系。 – user2143292 2013-03-28 00:06:07

+0

不理解这一点。你真的在任何地方使用Process类吗?也许发布更多的代码会有帮助。 – jkratz 2013-03-28 12:37:36

相关问题