Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字未关闭_Java_Sockets - Fatal编程技术网

Java套接字未关闭

Java套接字未关闭,java,sockets,Java,Sockets,好的。。。我是java新手,这是我的第一个应用程序。我正在组装一个java套接字应用程序。连接后,它会将按钮标签从“连接”更改为“断开”。如果按钮标签=断开,则socket.close。不知道为什么不关。是因为它是私人的吗?我知道可能有更好的方法来确定套接字是否打开,等等。但我真的是第一个,试图理解为什么下面的方法不起作用。任何帮助都将不胜感激。谢谢 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

好的。。。我是java新手,这是我的第一个应用程序。我正在组装一个java套接字应用程序。连接后,它会将按钮标签从“连接”更改为“断开”。如果按钮标签=断开,则socket.close。不知道为什么不关。是因为它是私人的吗?我知道可能有更好的方法来确定套接字是否打开,等等。但我真的是第一个,试图理解为什么下面的方法不起作用。任何帮助都将不胜感激。谢谢

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