2013-03-27 2 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를 읽을 수 있도록하려면 그러나 키우면가 발생하지 (fnh = null). 정수는 생성 된 동일한 파일에서 읽혀집니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

나는 여기에서 일어나고있는 것은에서 개봉 된 관심 변수를 설정의 actionPerformed() AlladinLamp의 방법은,하여 프로세스 클래스 ... 것을 사용하려고하는 생성자 후 을 호출되고 있다는 것을 의심 번호. 여기서 시도해 볼 수있는 쉬운 일은 ActionPerformed에 그리고 AlladinLamp 및 Processes 생성자의 끝에 System.out.println을 삽입하고 상황이 진행되는 순서를 확인하는 것입니다.

다른 포스터와 마찬가지로 패키지와 관련이 없습니다. public을 지정하지 않으면 기본 가시성이 패키지 레벨 가시성이므로 그대로 유지해야합니다.

깜박 잊지 .... 스윙 라이브러리는 이벤트 기반 GUI 라이브러리라는 것을 기억하십시오. 따라서 GUI가 먼저 구축 될 것입니다. 그 actionPerformed 메서드는 나중에까지 호출되지 않을 것입니다. 일단 전체 UI가 설정되고 콤보 상자에서 무언가를 선택하면됩니다.

+0

안녕하세요, 귀하 께서 저에게 묻는 곳에 진술을 올려 놓았습니다. Process 클래스의 constructor에 배치했을 때 출력이 없습니다. 그것은 메인 클래스에 전혀 링크되어 있지 않은 것처럼 보입니다. – user2143292

+0

이 점을 이해하지 못했습니다. 실제로 어디서나 Process 클래스를 사용하고 있습니까? 아마 더 많은 코드를 게시하는 것이 도움이 될 것입니다. – jkratz