编程语言
首页 > 编程语言> > java-无法绑定:字段为静态:form.MainForm.nameTextField

java-无法绑定:字段为静态:form.MainForm.nameTextField

作者:互联网

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

public static JTextField getNameTxtField(){
    return nameTxtField;
}
public static JTextField getNewUserNameTxtField(){
    return newUserNameTxtField;
}
public static JPasswordField getNewPasswordTextField(){
    return newPasswordTxtField;
}

以上所有吸气剂都位于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 = new MainForm();在类GameLogic中,因为我将得到一个StackOverflowError.

是否会因为我以非静态方法调用静态吸气剂而发生问题?

解决方法:

忘了静力学.我假设您要尝试的是将实例变量从一个类引用到另一个类.您的尝试是使用静态变量.而且您正在获得stackoverflow,因为您正在尝试这样的事情

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

这肯定会给您一个stackoverflow,因为您创建一个创建MainForm的GameForm,创建一个GameForm,创建一个GameForm,创建一个MainForm,创建一个GameForm,创建一个MainForm(得到要点?),这创建了stackoverflow.

一种解决方案是通过引用将MainForm传递给GameForm,并在必要时在MainForm中使用getter和setter.就像是

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实现它.您可以看到一个示例this answer.

标签:stack-overflow,static,swing,java
来源: https://codeday.me/bug/20191121/2055738.html