2011-01-05 4 views
0

showGUI() 메서드가 작동하도록하려면 컴파일러에서 "this"가 정적 변수가 아니며 정적 컨텍스트에서 참조 할 수 없다고 말합니다. 나는 이것을 "이것을"대체 할까? 나는 test.main을 시험해 보았다. 정적 메서드 showGUI()를 사용하는 이유는 start() 메서드뿐 아니라 다른 정적 메서드에서 메서드를 호출해야하기 때문입니다. 아래 두 가지 주요 수업이 있습니다.Java에서 "this"를 작동하는 것으로 바꾸려면 어떻게해야합니까?

public class Main extends SingleFrameApplication { 

    @Override protected void startup() { 
     showGUI(); 
    } 

    @Override protected void configureWindow(java.awt.Window root) { 
    } 

    public static Main getApplication() { 
     return Application.getInstance(Main.class); 
    } 

    public static void main(String[] args) { 
     launch(Main.class, args); 

    } 

    public static void showGUI() { 
     show(new GUI(this)); 
    } 
} 

public class GUI extends FrameView { 

    public GUI(SingleFrameApplication app) { 
     super(app); 
     initComponents(); 
    } 
    private void initComponents() { 
     //all the GUI stuff is somehow defined here 
    } 
} 

답변

1

는 다른 기능, 예를 들어,에 this을 통과해야하는 경우 GUI를 생성자는, 당신은 객체가 필요하고, showGUI 가장 비 정적 방법으로 남아 당신이 정말로 정적 메소드가 필요한 경우

@Override protected void startup() { 
    showGUI(); 
} 

public void showGUI() { 
    show(new GUI(this)); 
} 

, 당신은 작업 할 객체가 필요 :

public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    show(new GUI(main)); 
} 

또는 더 나은 :

// in your context outside of the Main object 
Main main = Main.getApplication(); 
main.showGUI(); 
:

더 나은
public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    main.startup(); 
} 

하거나, 정적 메소드를 작성하지 않습니다

5

정적 방법으로 this을 사용하는 것은 의미가 없습니다. this은 클래스의 특정 인스턴스를 나타내지 만 static은 인스턴스를 필요로하지 않으므로 멤버 변수 나 메서드에 액세스 할 수 없다는 것을 의미합니다.

그냥 showGUI을 static으로 설정하십시오.

public void showGUI() { 
    show(new GUI(this)); 
} 
+0

정적 인 내 용지함 메서드는 사용할 수 없습니다. –

+0

showGUI()는 정적이 아닌 startup()에 의해 호출됩니다. 정적 컨텍스트에서 코드 예제를 호출하는 경우 코드 예제가 표시되지 않습니다. 당신이하려는 일을 우리에게 말해줘야합니다. 언급 된 다른 사람들처럼,'new Main()'을 사용하여 새로운 인스턴스를 만들 수 있습니다.하지만 'showGUI'라는 함수 호출을 사용하면 실제로 새로운 Main 객체를 인스턴스화하는 것은 잘못된 것일 수 있습니다. – EboMike

0

'this'는 '현재 대상'을 의미합니다. 정적 메서드에는 현재 개체가 없습니다. 귀하의 예에서 thisnew Main()으로 바꾸십시오.

+0

'showGUI'는 비 정적 메소드에 의해 이미 호출되었습니다. 새 인스턴스를 만드는 이유는 무엇입니까? – EboMike

+0

OP는 그가 정적 컨텍스트에서 showGUI를 호출해야한다고 (또는 그가 필요하다고 생각하기 때문에) 말했기 때문에. –

+0

내 트레이 메서드는 정적이며 사용자가 열린 버튼을 클릭 할 때 메서드를 호출합니다. –

관련 문제