Java ActionListener获取';s的默认值

Java ActionListener获取';s的默认值,java,swing,model-view-controller,initialization,Java,Swing,Model View Controller,Initialization,我正在用Java实现一个简单的应用程序。我正在为应用程序使用MVC模块。问题是,当我的控制器创建视图和模型的对象时,当尝试使用简单的get方法时,我会得到默认值,而不是插入到UI中的新值。以下是代码exmaple: 视图: 控制器: public class Controller implements ActionListener { private float result; private Server server = new Server(); private

我正在用Java实现一个简单的应用程序。我正在为应用程序使用MVC模块。问题是,当我的
控制器
创建
视图
模型
的对象时,当尝试使用简单的get方法时,我会得到默认值,而不是插入到UI中的新值。以下是代码exmaple:

视图:

控制器:

public class Controller implements ActionListener {

    private float result;
    private Server server = new Server();
    private Client client = new Client(this);

    public Controller() {
        server.rateParser();
        client.startUI(this);
    }

    public void actionPerformed(ActionEvent e) {
        result = client.getAmmount();
    }
}
主要内容:

但是,到目前为止还不错,当我点击按钮并触发动作事件时,
getamount
方法返回-1,这是默认值。
客户机
类中的所有getter也是如此。有人知道为什么会这样吗

您正在初始化2个客户端

第一次
main的调用中

Controller controller = new Controller();
初始化类时,其所有成员也将初始化。由于
客户端
控制器的成员

public class Controller implements ActionListener {

    private Client client = new Client(this); // 1st initialization
}
它通过
newcontroller()
调用初始化

第二次是构造函数中的调用

public Controller() {

    server.rateParser();
    client.startUI(this); // <---- here
}

由于
actionPerformed
位于
Controller
内部,因此在
result=client.getamount()中调用的是其字段
client
。在程序的整个生命周期中,它保持不变,因此返回默认值(在初始化时创建)。但是,您显示的客户机是第二个客户机,
frame
,您为其调用
frame.setVisible(true)。该选项已被修改,但其值从未被读取。

请考虑提供一个说明问题的选项。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应您正在使用
客户机(CurrencyParser,ActionListener)
构造函数实例化客户机实例,但您的代码片段显示
客户机(ActionListener)
构造函数。这可能是原因吗?对不起,忘记删除那段代码了。现在已修复。请更正标题。
public class Controller implements ActionListener {

    private Client client = new Client(this); // 1st initialization
}
public Controller() {

    server.rateParser();
    client.startUI(this); // <---- here
}
public void startUI(ActionListener listener) {

    Client frame = new Client(listener); // 2nd initialization
    frame.setVisible(true);
}