Java 当我用相同的方法创建套接字对象时,我不能编辑我的JTextArea?

Java 当我用相同的方法创建套接字对象时,我不能编辑我的JTextArea?,java,swing,serversocket,Java,Swing,Serversocket,当我添加代码行“Socket Socket=serverSocket.accept();”时,它不会向文本区域写入任何内容。这是我见过的最奇怪的事情。使代码写入文本区域,位于添加的代码行之前。所以我不知道为什么它没有被写入文本区域。(我在Netbeans中使用按钮Jbutton2的代码执行此操作)添加的行会阻止Swing EDT,因此在有人连接到套接字之前不会绘制对UI的更新。更新文本区域只安排重画操作-实际的重画在方法结束后进行。我在Netbeans中使用按钮Jbutton2的代码执行此操作)


当我添加代码行“Socket Socket=serverSocket.accept();”时,它不会向文本区域写入任何内容。这是我见过的最奇怪的事情。使代码写入文本区域,位于添加的代码行之前。所以我不知道为什么它没有被写入文本区域。(我在Netbeans中使用按钮Jbutton2的代码执行此操作)

添加的行会阻止Swing EDT,因此在有人连接到套接字之前不会绘制对UI的更新。更新文本区域只安排重画操作-实际的重画在方法结束后进行。我在Netbeans中使用按钮Jbutton2的代码执行此操作)-套接字块。由于您的代码是从侦听器调用的,因此它在事件调度线程上执行,这将阻止GUI响应事件。您的
套接字
需要在单独的
线程
上创建。有关更多信息,请阅读上的Swing教程部分。如本教程所述,您可以使用
SwingWorker
。你也可以在论坛上搜索其他使用“Socket”的例子。1)
catch(Exception e){}
不要忽略异常!除非实现日志记录,否则至少调用
Throwable.printStackTrace()
2)仅在代码在另一个IDE中测试并被视为正常工作(表明第一个IDE存在问题)后才标记IDE。@camickr谢谢,这是一个很大的帮助。这只是一个问题,因为如果我在一个新线程上打开一个套接字,我不确定如何从另一个线程更新GUI。假设我有一个while循环等待客户端连接,我想在每次客户端连接时更新GUI。。。我不知道如何从另一个线程更新GUI。阅读我提供的教程链接!
SwingWorker
允许您在收到值时通过“发布”值轻松完成此操作。
  try
    {
        ServerSocket serverSocket = new ServerSocket(Port);
        txaLogs.setText("It works");
        //Socket socket = serverSocket.accept(); 
        System.out.println("Socket opened");

    } catch (Exception e)
    {
    }

    //CODE 2

    try
    {
        ServerSocket serverSocket = new ServerSocket(Port);
        txaLogs.setText("It works");
        Socket socket = serverSocket.accept();                    //ADDED LINE
        System.out.println("Socket opened");

    } catch (Exception e)
    {
    }