Java 无法绑定:字段是静态的:form.MainForm.nameTextField

Java 无法绑定:字段是静态的:form.MainForm.nameTextField,java,swing,static,stack-overflow,Java,Swing,Static,Stack Overflow,创建静态方法并在另一个类中调用它们时出错: public static JTextField getNameTxtField(){ return nameTxtField; } public static JTextField getNewUserNameTxtField(){ return newUserNameTxtField; } public static JPasswordField getNewPasswordTextField(){ return newPa

创建静态方法并在另一个类中调用它们时出错:

public static JTextField getNameTxtField(){
    return nameTxtField;
}
public static JTextField getNewUserNameTxtField(){
    return newUserNameTxtField;
}
public static JPasswordField getNewPasswordTextField(){
    return newPasswordTxtField;
}
上述所有getter都位于
MainForm
类中,并在此类中调用:

GameLogic

public void addToDatabase() throws SQLException {
    controller.addUserToDatabase(MainForm.getNameTxtField().getText(),MainForm.getNewUserNameTxtField().getText(), String.valueOf(MainForm.getNewPasswordTextField()) , "insert into application_user values(?, ?, ?)");
}

为什么我会得到这个信息?我不太明白这个信息,有人能给我解释一下吗

我无法创建这样的对象:
MainForm form=newmainform()堆栈溢出错误


出现此问题是因为我在非静态方法中调用了静态getter吗?

getText()
(在
addToUserDatabase()中调用)
)是一个非静态函数。不能从静态上下文引用非静态的内容

忘记
static
s。我假设您要做的是将一个实例变量从一个类引用到另一个类中。您的尝试是使用
静态
变量。你得到stackoverflow是因为你在尝试这样的事情

public class MainForm ... {
    public MainForm() {
        GameForm game = new GameForm();
    }
}
public class GameForm ... {
    public GameForm() {
        MainForm main = new MainForm();
    }
}
这肯定会给你一个堆栈溢出,因为你创建了一个
GameForm
,它创建了
MainForm
,它创建了一个
MainForm
,它创建了一个
GameForm
,它创建了一个
MainForm
(明白了吗?)

解决方案是通过引用将
MainForm
传递到
GameForm
,必要时在
MainForm
中使用
getter
setters
。差不多

public class MainForm ... {
    private JTextField field;
    private GameForm game;

    public MainForm() {
        game = new GameForm(MainForm.this);
    }

    public JTextField getField (){
        return field;
    }
}

public class GameField ... {
    private MainForm main;
    private JTextField field;

    public GameForm(final MainForm main) {
        this.main = main;
        this.field = main.getField();
    }
}
现在,在
GameForm
中,您正在引用同一个实例
JTextField



一个更好、可能更合适的解决方案是使用
接口
,并让
MainForm
实现它。例如,您可以看到。

这是编译错误还是运行时错误?是
nameTxtField
static?另外,究竟是哪一行生成了错误?@ValekHalfHeart yes nameTxtField是静态的。我正在使用intellij idea,所以在开始时,nameTxtField不是静态的。我现在改了。它没有说明错误是从哪一行生成的。@kajacx这是一个编译时错误。程序根本没有启动。我甚至无法调试它。“我真的不明白这条信息”-@助记符。什么消息?谢谢,它起作用了。现在,我将通读这些代码,以便学习一些新的知识。您能解释一下为什么上面的代码不会导致堆栈溢出错误吗?非常感谢!因为在
GameForm
中没有创建新的
MainForm
,所以只能将当前
MainForm
的引用传递给
GameForm
。这是一个巨大的不同。好的,谢谢。我想game=newgamelogic(MainForm.this)指的是当前的MainForm,但没有创建一个?