Java 无法绑定:字段是静态的:form.MainForm.nameTextField
创建静态方法并在另一个类中调用它们时出错:Java 无法绑定:字段是静态的:form.MainForm.nameTextField,java,swing,static,stack-overflow,Java,Swing,Static,Stack Overflow,创建静态方法并在另一个类中调用它们时出错: public static JTextField getNameTxtField(){ return nameTxtField; } public static JTextField getNewUserNameTxtField(){ return newUserNameTxtField; } public static JPasswordField getNewPasswordTextField(){ return newPa
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=newmainform()因为我将得到一个堆栈溢出错误
出现此问题是因为我在非静态方法中调用了静态getter吗?getText()
(在addToUserDatabase()中调用)
)是一个非静态函数。不能从静态上下文引用非静态的内容 忘记static
s。我假设您要做的是将一个实例变量从一个类引用到另一个类中。您的尝试是使用静态变量。你得到stackoverflow是因为你在尝试这样的事情
public class MainForm ... {
public MainForm() {
GameForm game = new GameForm();
}
}
public class GameForm ... {
public GameForm() {
MainForm main = new MainForm();
}
}
这肯定会给你一个堆栈溢出,因为你创建了一个GameForm
,它创建了MainForm
,它创建了一个MainForm
,它创建了一个GameForm
,它创建了一个MainForm
(明白了吗?)
解决方案是通过引用将MainForm
传递到GameForm
,必要时在MainForm
中使用getter
和setters
。差不多
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
实现它。例如,您可以看到。这是编译错误还是运行时错误?是nameTxtField
static?另外,究竟是哪一行生成了错误?@ValekHalfHeart yes nameTxtField是静态的。我正在使用intellij idea,所以在开始时,nameTxtField不是静态的。我现在改了。它没有说明错误是从哪一行生成的。@kajacx这是一个编译时错误。程序根本没有启动。我甚至无法调试它。“我真的不明白这条信息”-@助记符。什么消息?谢谢,它起作用了。现在,我将通读这些代码,以便学习一些新的知识。您能解释一下为什么上面的代码不会导致堆栈溢出错误吗?非常感谢!因为在GameForm
中没有创建新的MainForm
,所以只能将当前MainForm
的引用传递给GameForm
。这是一个巨大的不同。好的,谢谢。我想game=newgamelogic(MainForm.this)指的是当前的MainForm,但没有创建一个?