当我创建静态方法并在另一个类中调用它们时出现错误:
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 = new MainForm();
在类里面GameLogic
因为我会得到一个 StackOverflowError
.
问题是否是因为我在非静态方法中调用静态 getter 导致的?
最佳答案
忘记静态
。我假设您想要做的是将一个实例变量从一个类引用到另一个类中。您的尝试是使用静态变量。你会得到 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
,并在 中使用
。类似的东西getter
和 setter
必要时使用 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/