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