如何用Java中的“this”替换有效的东西

时间:2011-01-05 22:46:43

标签: java replace this frame

我希望让showGUI()方法起作用,编译器说“this”不是静态变量,不能从静态上下文中引用,我会用什么来代替“this”?我已经尝试过test.main(测试是它所在的包)。我使用静态方法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 个答案:

答案 0 :(得分:5)

好吧,在静态方法中使用this没有意义。 this指的是类的特定实例,但static表示这是一个不需要实例的方法,因此无法访问任何成员变量或方法。

只需使showGUI非静态。

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

答案 1 :(得分: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));
}

甚至更好:

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

甚至更好,不要创建任何静态方法:

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

答案 2 :(得分:0)

'this'表示'当前对象'。在静态方法中,没有当前对象。在您的示例中,请尝试将this替换为new Main()