2017-02-08 2 views
0

간단히하기 위해 문제의 원인이되는 핵심 요소에서 발생하는 오류를 복제했습니다.Java 클래스의 다른 인스턴스

세 가지 주요 클래스가 있습니다. 첫 번째 클래스는 메서드를 초기화하고 설정하는 주 클래스입니다 (주). 그런 다음 데이터베이스의 데이터를 코드 (Init)로 가져 오는 데이터베이스 클래스가 있습니다. 셋째 GUI 요소 (접근 자)를 처리하는 GUI 클래스가 있습니다.

accessor.print()를 호출 할 때 주 클래스 (init.setUp)에서 데이터베이스 클래스 (accessor.setUp)에서 초기화 한 변수 (메시지)가 null로 나타나는 문제가 발생했습니다. 메소드를 GUI 클래스의 ActionListenerEvent 다음에 추가하십시오.

나는 같은 클래스의 다른 인스턴스가 있기 때문에 이런 일이 발생하지만 어떻게 해결해야할지 모르겠다.

public class Init { 
    public String message; 

    public void setUp(){ 
     message="Hello World"; 
    } 
    public void print(){ 
     System.out.println(message.length()); 
    } 
} 

이 접근 클래스는 다음과 같습니다 : 사전에

public class Accessor { 
    public void tryAccess(){ 
     Init init=new Init(); 
     init.print(); 
    } 
} 

감사

public class main { 
    public static void main(String[] args){ 
     Init init=new Init(); 
     init.setUp(); 

     Accessor acc=new Accessor(); 
     acc.tryAccess(); 
    } 
} 

이 초기화 클래스는 다음과 같습니다

이 메인 클래스입니다.

+4

왜 개별 인스턴스를 사용하고 있습니까? – shmosel

+1

생성자를 통해 접근 자에게 또는 생성 된 init 인스턴스를 tryAccess() 메서드의 인수로 전달할 수 있으므로 초기화 인스턴스가 하나만 있습니다. 또한 인스턴스간에 액세스해야하는 경우 메시지를 정적 변수로 선언 할 수 있습니다. – Santo

답변

2

초기화 개체가 너무 많아서 다른 개체와 관련이 없습니다. 하나를 설정하는 것은 다른 것에 아무런 영향을주지 않으며, 이것을 해결하기 위해서는 하나의 인스턴스가 필요하고 필요하다는 것을 분명히해야합니다.

public class main { 
    public static void main(String[] args){ 
     Init init=new Init(); 
     init.setUp(); 

     Accessor acc=new Accessor(); 
     acc.tryAccess(); 
    } 
} 

public class main { 
    public static void main(String[] args){ 
     Init init=new Init(); 
     init.setUp(); 

     Accessor acc=new Accessor(init); // pass it in! 
     acc.tryAccess(); 
    } 
} 

을 변경 한 후 액세스 용 객체의 초기화 필드에 매개 변수 초기화 객체를 전달합니다.

public class Accessor { 
    private Init init; 

    public Accessor(Init init) { 
     this.init = init; // initialize field 
    } 

    public void tryAccess(){ 
     // Init init=new Init(); // *** don't create a new instance!! *** 
     init.print(); 
    } 
} 
+0

와우, 내가 생각했던 것보다 훨씬 간단 해. 고마워. :) – Nightfortress

+0

@Nightfortress : 'new' 키워드를 사용할 때마다 새로운 무언가 인스턴스를 생성한다는 것을 이해하십시오. 때때로 당신은 그들을 세어야합니다. –

관련 문제