Как заменить «это» в Java чем-то, что работает - PullRequest
0 голосов
/ 06 января 2011

Я ищу, чтобы метод showGUI () работал, компилятор говорит, что «this» не является статической переменной и на нее нельзя ссылаться из статического контекста. Что бы я использовал для замены «this»?Я пробовал test.main (test - это пакет, в котором он находится).Причина, по которой я использую статический метод showGUI (), заключается в том, что мне нужно, чтобы метод вызывался из другого статического метода, а также из метода startup ().Ниже приведены мои два основных класса.

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
    }
}

Ответы [ 3 ]

5 голосов
/ 06 января 2011

Что ж, использование this в статическом методе не имеет смысла.this относится к конкретному экземпляру класса, но static означает, что этот метод не требует экземпляра и поэтому не имеет доступа ни к каким переменным или методам-членам.Просто сделайте showGUI нестатичным.

public void showGUI() {
    show(new GUI(this));
}
1 голос
/ 06 января 2011

Если вам нужно передать 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));
}

или даже лучше:

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

или даже лучше, не создавайте статический метод:

// in your context outside of the Main object
Main main = Main.getApplication();
main.showGUI();
0 голосов
/ 06 января 2011

«это» означает «текущий объект». В статических методах нет текущего объекта. В вашем примере попробуйте заменить this на new Main().

...