每次文本字段更改时,textField中的变量都不会更改?

时间:2014-10-23 20:06:13

标签: java

我在java中编写了一个通过sshxcue库连接到ip地址的代码。

该应用程序有一个JTextField并获取ip,例如192.168.1.101并将其返回给ConnBean对象。

问题是:当我第一次输入IP时,应用程序运行正常但是当我在textfield中更改IP时,ConnBean对象仍然使用我第一次输入的IP地址!我怎么解决呢?

button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String ip = input.getText();
        output.setText(input.getText());
        // Initialize a ConnBean object, parameter list is ip, username, password
        ConnBean cb = new ConnBean(ip , "username","password");
        // Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
        ssh = SSHExec.getInstance(cb);          
        // Connect to server
        ssh.connect();
    }
});

我把textArea作为输出正确返回。但ConnBean不是。为什么呢?

1 个答案:

答案 0 :(得分:0)

SSHExec实现为单例,如果其实例已存在,则返回相同的实例。

但是,您可以尝试更改传递给SSHExec的ConnBean中的主机,因为它具有公共访问器,正在使用它的引用,而不是副本。在匿名侦听器之外创建ConnBean,并在侦听器内部设置IP。

某处(它不会超出范围,如字段),定义

ConnBean cb = null;

然后将actionListener定义为:

button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String ip = input.getText();
        output.setText(input.getText());
        // Initialize a ConnBean object, parameter list is ip, username, password
        if ( cb == null ) {
            cb = new ConnBean(ip , "username","password");
        } else {
            cb.setHost(ip);
        }

        // Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
        ssh = SSHExec.getInstance(cb);          
        // Connect to server
        ssh.connect();
    }
});

当然,在再次尝试连接之前,请确保已断开连接。

Source code of ConnBean

Source code of SSHExec