java - 无法绑定(bind): field is static: form. MainForm.nameTextField

标签 java swing static stack-overflow

当我创建静态方法并在另一个类中调用它们时出现错误:

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,并在 中使用 gettersetter必要时使用 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/

相关文章:

java - 登录后如何正确注销 Java EE 6 Web 应用程序

java - JScrollPane 和自动滚动 : Disturbing scrolling behavior

c++ - 具有共享私有(private)数据的模板函数

java - 使用 Eclipse 和 Tomcat 管理库

java - 填充 GridView 问题

java - Eclipse 中的 windowbuilder,不确定如何显示窗口

java - 无法在小程序中使用 swing UI - 调用公共(public)方法

c - 错误 C4700 : uninitialized local variable "" used

Java:静态父/子变量和方法

java - 以编程方式在 JpaProperties 中添加 hibernate 拦截器 - Spring