当我创建静态方法并在另一个类中调用它时,我收到错误:
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?
答案 0 :(得分:3)
忘记static
。我假设你要做的是将一个实例变量从一个类引用到另一个类。您的尝试是使用static
个变量。你正在尝试使用stackoverflow,因为你正在尝试这样的事情
public class MainForm ... {
public MainForm() {
GameForm game = new GameForm();
}
}
public class GameForm ... {
public GameForm() {
MainForm main = new MainForm();
}
}
这肯定会给你一个stackoverflow,因为你创建了一个创建GameForm
的{{1}},它创建了一个MainForm
,创建了一个GameForm
,创建了一个MainForm
GameForm
1}},它创建一个MainForm
(得到点?),它创建一个stackoverflow。
解决方案是通过引用将MainForm
传递给GameForm
,并在getter
中使用setters
和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作为示例。
答案 1 :(得分:0)
getText()
(在addToUserDatabase()
中调用)是一个非静态函数。您无法从静态上下文中引用非静态内容。