标签:stack-overflow static swing java
创建静态方法并在另一个类中调用它们时出现错误:
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。