gpt4 book ai didi

java - 无法绑定(bind) : field is static: form. MainForm.nameTextField

转载 作者:行者123 更新时间:2023-11-30 09:10:20 25 4
gpt4 key购买 nike

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

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

以上所有getters都位于MainForm类中,并在此类中调用:

游戏逻辑:

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

为什么我会收到消息?我不太明白消息的含义,有人可以向我解释一下吗?

我不能在 GameLogic 类中创建这样的对象:MainForm form = new MainForm(); 因为我会得到一个 StackOverflowError.

问题是否因为我在非静态方法中调用静态 getter 而出现?

最佳答案

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

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

这肯定会给你一个 stackoverflow,因为你创建了一个 GameForm,它创建了 MainForm,它创建了一个 GameForm,它创建了一个 MainForm,它创建一个 GameForm,它创建一个 MainForm(明白了吗?),它创建一个 stackoverflow。

一个解决方案是通过引用将MainForm传递给GameForm,并在中使用gettersetter MainForm 必要时。有点像

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


不过,一个更好、可能更合适的解决方案是使用 interface 并让 MainForm 实现它。可以看到this answer举个例子。

关于java - 无法绑定(bind) : field is static: form. MainForm.nameTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com