我在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不是。为什么呢?
答案 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();
}
});
当然,在再次尝试连接之前,请确保已断开连接。