2013-03-27 52 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

相關問題