Java套接字未关闭
好的。。。我是java新手,这是我的第一个应用程序。我正在组装一个java套接字应用程序。连接后,它会将按钮标签从“连接”更改为“断开”。如果按钮标签=断开,则socket.close。不知道为什么不关。是因为它是私人的吗?我知道可能有更好的方法来确定套接字是否打开,等等。但我真的是第一个,试图理解为什么下面的方法不起作用。任何帮助都将不胜感激。谢谢Java套接字未关闭,java,sockets,Java,Sockets,好的。。。我是java新手,这是我的第一个应用程序。我正在组装一个java套接字应用程序。连接后,它会将按钮标签从“连接”更改为“断开”。如果按钮标签=断开,则socket.close。不知道为什么不关。是因为它是私人的吗?我知道可能有更好的方法来确定套接字是否打开,等等。但我真的是第一个,试图理解为什么下面的方法不起作用。任何帮助都将不胜感激。谢谢 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Socket s = new Socket();
String host = jTextField1.getText();
double d = Double.parseDouble(jTextField2.getText());
int port = (int) d;
if (jLabel4.getText() == "Disconnected") {
try {
s.connect(new InetSocketAddress(host, port), 60);
jLabel4.setText("Connected");
jButton1.setText("Disconnect");
} catch (IOException ex) {
Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
try {
s.close();
jLabel4.setText("Disconnected");
jButton1.setText("Connect");
} catch (IOException ex) {
Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
}
}
这可能是因为字符串比较。
试一试
如果这不能解决您的问题,请保留一个表示已连接或未连接的布尔值,而不是从标签中读取字符串
比如
boolean connected;
\\ something
if(connected)
\\ do this
else
\\do that
编辑:另外,您应该使套接字脱离类范围。它必须是一个班级成员。我不明白你的程序应该如何工作。套接字是操作处理程序的本地套接字,因此要么连接新分配的套接字,要么关闭从未使用过的套接字。我认为您应该重新访问您的程序,并将套接字保留为某个对象的字段,这样您就可以根据程序的当前状态和来自GUI的用户请求查询它并进行相应的操作 另外,请注意字符串应该与Object.equals进行比较,而不是与==进行比较,因为==检查对象标识,并且对于运行时检查是不可靠的,即使有时它在参数为编译时常量或内部字符串时工作
此外,您的程序应该保留一个内部布尔标志,而不是检查标签的值。例如,如果这是一个真正的应用程序,并且您添加了翻译,该怎么办?您不应该将字符串与==进行比较,除此之外,还有什么症状?你的程序记录了什么吗?撞车?
boolean connected;
\\ something
if(connected)
\\ do this
else
\\do that