我希望让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
}
}
答案 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()
。