首页 > 解决方案 > new Socket 挂起应用程序

问题描述

当我JFrame尝试创建一个新的Socket. 相同的代码(不是相同的 .java 文件,而是相同的代码行)在我旁边的计算机上工作。

知道为什么代码会冻结吗?

尝试#1

private Socket socket;
public void connect( String ip, int port ) {    
    try {
        System.out.println( ip + " " + port );  //just to show the arguments doesn't seem to be the issue.
        socket = new Socket(ip,port);
        System.out.println(".");    

    } catch (IOException e) {System.out.println(e);}    
}

控制台中的输出(xxx = digets)。如你看到的, ”。” 从不打印。

192. XXX _ xxx .53 1494

这也不起作用(帧“冻结”和相同的输出)。

尝试#2

public void connect( String ip, int port ) {
    try {
        System.out.println( ip + " " + port );
        socket.connect(new InetSocketAddress(ip,port), 5000);
        System.out.println(".");

    } catch (IOException e) {System.out.println(e);}    
}

192. XXX _ xxx .53 1494

标签: javasockets

解决方案


您正在 Swing 事件调度线程中运行该代码。这是执行诸如处理侦听器中的事件之类的事情并执行绘画的线程。

它挂起是因为 Socket 正在尝试连接,并且在此期间,由于线程忙(尝试连接),因此无法进行事件处理或绘制。

套接字连接(和读/写)需要发生在它自己的线程中,以免阻塞 EDT。


推荐阅读