2017-10-26 18 views
1

난 그냥 자바 시작하고 새로운 GUI에서 일하고 있었어. 내 JFrame을 만드는 메소드를 만들었고 기본 위치, 닫기 연산, 배경색 등을 설정했습니다.공용 메서드에서 시작된 개체를 확인할 수 없습니까?

나는 이것을 정리하기 위해 주 코드에서 벗어나는 별도의 메소드를 만들었습니다. 이 메서드를 해결하는 방법은 이미 알고 있습니다. 모든 메서드를 기본 메서드에 넣으면됩니다.

public class Main { 

    public static void makeWindow(){ 
     JFrame mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
    } 

    public static void main(String args[]){ 
     makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 

나는 "MainWindow를"가 해결 될 수 없다는 내 주요 방법에 오류가 발생합니다 :

는 코드입니다. 왜 이런거야? 그것은 다른 방법으로 mainWindow 객체를 만들었 기 때문입니까? main 메서드에 makeWindow() 메서드의 모든 것을 넣지 않고이 문제를 해결할 수있는 방법이 있습니까?

+1

mainWindow는 makeWindow() 메서드에 대해 로컬입니다. 그것은 전부 범위에 관한 것입니다. –

+1

다음은 범위에 대한 외부 가이드입니다. http://www.geeksforgeeks.org/variable-scope-in-java/ – Compass

+0

mainWindow가 로컬이지만 mainWindow가 객체 인 것으로 나타났습니다. 어떻게 인스턴스 객체를 만들 수 있습니까? 이미 각 메소드 외부에서 인스턴스 변수를 선언 할 수 있다는 것을 이미 알고 있지만 객체에 대해 동일한 작업을 수행하려면 어떻게해야합니까? – Psear

답변

1

mainWindowmakeWindow 메서드의 컨텍스트에서만 존재하므로 작동하지 않습니다. @Xing으로

댓글을 달았

public class Main { 

    private static JFrame mainWindow; // declare it here so it can be seen from your main method. 

    public static void makeWindow(){ 
     mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
    } 

    public static void main(String args[]){ 
     makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 

EDIT (크레딧 공유), 당신이 당신의 makeWindow 방법에서 mainWindow을 반환 할 수 있습니다 :

public class Main { 

    public static JFrame makeWindow(){ 
     JFrame mainWindow = new JFrame(); 
     mainWindow.setVisible(true); 
     mainWindow.setPreferredSize(new Dimension(400,400)); 
     mainWindow.pack(); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setLocationRelativeTo(null); 
     return mainWindow; 
    } 

    public static void main(String args[]){ 
     JFrame mainWindow = makeWindow(); 
     JPanel mainPanel = new JPanel(); 
     mainWindow.add(mainPanel); 
    } 
} 
+0

고마워요! 나를 위해 그것을 명백하게했다! – Psear

+1

또한 mainWindow를 makeWindow() 메서드에서 반환하고 main 메서드의 변수에 할당 할 수 있습니다. – Xing

+0

오 그래, 그런 생각은 없었습니다. 감사! – Psear

0

만드는 당신은 그것을 대신 정적 필드 수 mainWindow 인스턴스/참조 전역 참조

private static JFrame mainWindow; 

public static void makeWindow(){ 
    mainWindow = new JFrame(); 
}