【发布时间】:2019-09-17 22:04:33
【问题描述】:
我正在尝试实现一个显示连接或断开连接的 JButton,具体取决于它是否连接到服务器。因此,当我单击按钮时显示连接时,它将连接到服务器,然后显示断开连接。当我单击断开连接时,它将与服务器断开连接,并且按钮将再次显示连接。但是,当我单击按钮时,什么也没有发生。
btnConnect.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
if (btnConnect.getText().equals("Connect")){
btnConnect.setText("Disconnect");
try {
int portNum = 5520;
String hostAddress = Actual_IP_Address.getText();
sock = new Socket(hostAddress, portNum);
writeSock = new PrintWriter ( sock.getOutputStream(), true);
readSock = new BufferedReader (new InputStreamReader(sock.getInputStream()));
}
catch(Exception ex) {
System.out.println("Error: " + ex);
sock = null;
}
}
if (btnConnect.getText().equals("Disconnect")){
btnConnect.setText("Connect");
try {
readSock.close();
writeSock.close();
sock.close();
sock = null;
}
catch(Exception ex) {
System.out.println("Error: " + ex);
sock = null;
}
}
}}
);
为什么当我点击按钮时它只显示连接?
【问题讨论】:
-
附带说明,不要为此使用
MouseListener,而是使用ActionListener,因为可以通过键盘和鼠标“操作”按钮;) -
你的套接字和 UI 逻辑也应该分开,你冒着阻塞 UI 的风险,直到套接字完成写入/读取(这实际上可能是你的首要问题的原因 - UI 赢了在退出
mouseClicked方法之前不要更新)。我会改用观察者模式