Java 简单客户端-服务器聊天应用程序不工作

Java 简单客户端-服务器聊天应用程序不工作,java,swing,networking,serversocket,Java,Swing,Networking,Serversocket,我正在尝试使用流套接字和Swing创建一个简单的客户机-服务器聊天应用程序。但它并没有发挥应有的作用。显然,服务器只是等待连接,不继续 我有三个java文件,Server.java、Client.java和ChatApp.java Server.java package com.htpj.networkingChatApp; import java.awt.BorderLayout; import java.awt.event.ActionEvent; impor

我正在尝试使用流套接字和Swing创建一个简单的客户机-服务器聊天应用程序。但它并没有发挥应有的作用。显然,服务器只是等待连接,不继续

我有三个java文件,Server.java、Client.java和ChatApp.java

Server.java

    package com.htpj.networkingChatApp;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;

    public class Server extends JFrame {

        private static final long serialVersionUID = 1L;
        private JTextArea displayArea;
        private JTextField messageEnterField;
        private ServerSocket server;
        private Socket connectionSocket;
        private ObjectInputStream input;
        private ObjectOutputStream output;
        private int counter = 1;

        protected void serverGui() {
            messageEnterField = new JTextField();
            setMessageEnterFieldEditable(false);

            messageEnterField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    sendDataToClient(e.getActionCommand());
                }
            });

            add(messageEnterField, BorderLayout.SOUTH);

            displayArea = new JTextArea();
            add(new JScrollPane(displayArea), BorderLayout.CENTER);
            displayArea.setEditable(false); // display area is never editable

            setSize(500, 500);
            setLocationRelativeTo(null);
            setTitle("Chat Server");
            setVisible(true);

        }

        protected void runServer() {

            try {
                server = new ServerSocket(2000, 100);

                while (true) {
                    try {
                        waitForConnection(); // wait for a connection
                        getStreams(); // get input and output streams
                        processConnection(); // process connections

                    } catch (EOFException e) {
                        displayMessage("\n server terminated the connection");
                    } finally {
                        closeConnection();
                        ++counter;
                    }
                }

            } catch (IOException e) {

                e.printStackTrace();
            }

        } // ENDOF method runServer

        private void waitForConnection() {

            try {

                displayMessage("Waiting for Connection\n");
                connectionSocket = server.accept();
                displayMessage("Connection" + counter + "received from: " + connectionSocket.getInetAddress() + "port: "
                        + connectionSocket.getPort());

            } catch (IOException e) {
                e.printStackTrace();
            }
        } // ENDOF method waitForConnection

        private void getStreams() throws IOException {

            output = new ObjectOutputStream(connectionSocket.getOutputStream());
            output.flush(); // flush output buffer to send header information

            input = new ObjectInputStream(connectionSocket.getInputStream());

            displayMessage("\n Got I/O Streams \n");
        } // ENDOF getStreams method

        private void processConnection() throws IOException {

            String message = null;
            sendDataToClient("Connection Successful \n");

            setMessageEnterFieldEditable(true); // enable server to type message

            do {
                try {

                    message = (String) input.readObject();
                    displayMessage("\n" + message);

                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            } while (!message.equals("CLIENT >> TERMINATE"));
        } // ENDOF processConnection method

        private void closeConnection() {

            displayMessage("\n closing connection \n");

            setMessageEnterFieldEditable(false);

            try {
                output.close();
                input.close();
                connectionSocket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF closeConnection method

        private void sendDataToClient(String messageFromServer) {

            try {
                output.writeObject("SERVER>> " + messageFromServer);
                output.flush(); // flush output to client
            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF sendDataToClient method

        private void displayMessage(String showMessage) {

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    displayArea.append(showMessage);
                }
            });
        } // ENDOF method displayMessage

        private void setMessageEnterFieldEditable(final boolean isEditable) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    messageEnterField.setEditable(isEditable);
                }
            });
        }

    } // ENDOF class server
package com.htpj.networkingChatApp;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Client extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTextField messageEnterField;
    private JTextArea displayArea;

    private String chatHost;
    private Socket clientSocket;

    private ObjectInputStream input;
    private ObjectOutputStream output;

    private String message = "";

    public Client(String host) {
        this.chatHost = host;
    }

    protected void clientGui() {
        messageEnterField = new JTextField();

        setMessageEnterFieldEditable(false);

        messageEnterField.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                sendDataToServer(e.getActionCommand());
            }
        });

        add(messageEnterField, BorderLayout.SOUTH);

        displayArea = new JTextArea();
        add(new JScrollPane(displayArea), BorderLayout.CENTER);
        displayArea.setEditable(false);

        setTitle("Chat Client");
        setSize(500, 500);
        setLocationRelativeTo(null);
        setVisible(true);

    } // END OF clientGui method

    // connect to the server and process message from server
    protected void runClient() throws UnknownHostException, IOException, ClassNotFoundException {

        // connect to server, get Streams, process connection
        try {
            connectToServer();
            getStreams();
            processConnection();

        } catch (EOFException e) {
            displayMessage("\n client closed the connection");
        } finally {
            closeConnection();
        }
    }

    private void connectToServer() throws UnknownHostException, IOException {

        displayMessage("Attempting Connection to Server: \n");

        clientSocket = new Socket(InetAddress.getByName(chatHost), 2000);
        displayMessage(
                "Connected to: " + clientSocket.getInetAddress().getHostName() + "on Port : " + clientSocket.getPort());

    } // END OF method connectToServer

    private void getStreams() throws IOException {

        output = new ObjectOutputStream(clientSocket.getOutputStream());
        output.flush();

        input = new ObjectInputStream(clientSocket.getInputStream());

        displayMessage("\n  Got I/O stream \n ");

    } // END OF getStreams method

    private void processConnection() throws ClassNotFoundException, IOException {

        displayMessage("\n connected to server\n");

        setMessageEnterFieldEditable(true);

        do {

            message = (String) input.readObject();
            displayMessage("\n" + message);

        } while (!message.equals("SERVER>> TERMINATE"));

    } // end of processConnection method

    private void closeConnection() throws IOException {
        displayMessage("\n closing connection ");
        input.close();
        output.close();
        clientSocket.close();
        setMessageEnterFieldEditable(false);

    } // end of closeConnection method

    private void displayMessage(final String messageToShow) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                displayArea.append(messageToShow);
            }
        });

    } // end of displayMessage method

    private void sendDataToServer(String messageToServer) {
        try {
            output.writeObject(messageToServer);
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } // end of sendDataToServer method

    private void setMessageEnterFieldEditable(final boolean isEditable) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                messageEnterField.setEditable(isEditable);
            }
        });
    }

}
package com.htpj.networkingChatApp;

import java.io.IOException;

public class ChatApp{
    public static void main(String[] args) {

        Server chatServer = new Server();
        Client chatClient = new Client("127.0.0.1");

        chatServer.serverGui();
        chatClient.clientGui();

         chatServer.runServer();
        try {
            chatClient.runClient();
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }

    }
}
Client.java

    package com.htpj.networkingChatApp;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;

    public class Server extends JFrame {

        private static final long serialVersionUID = 1L;
        private JTextArea displayArea;
        private JTextField messageEnterField;
        private ServerSocket server;
        private Socket connectionSocket;
        private ObjectInputStream input;
        private ObjectOutputStream output;
        private int counter = 1;

        protected void serverGui() {
            messageEnterField = new JTextField();
            setMessageEnterFieldEditable(false);

            messageEnterField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    sendDataToClient(e.getActionCommand());
                }
            });

            add(messageEnterField, BorderLayout.SOUTH);

            displayArea = new JTextArea();
            add(new JScrollPane(displayArea), BorderLayout.CENTER);
            displayArea.setEditable(false); // display area is never editable

            setSize(500, 500);
            setLocationRelativeTo(null);
            setTitle("Chat Server");
            setVisible(true);

        }

        protected void runServer() {

            try {
                server = new ServerSocket(2000, 100);

                while (true) {
                    try {
                        waitForConnection(); // wait for a connection
                        getStreams(); // get input and output streams
                        processConnection(); // process connections

                    } catch (EOFException e) {
                        displayMessage("\n server terminated the connection");
                    } finally {
                        closeConnection();
                        ++counter;
                    }
                }

            } catch (IOException e) {

                e.printStackTrace();
            }

        } // ENDOF method runServer

        private void waitForConnection() {

            try {

                displayMessage("Waiting for Connection\n");
                connectionSocket = server.accept();
                displayMessage("Connection" + counter + "received from: " + connectionSocket.getInetAddress() + "port: "
                        + connectionSocket.getPort());

            } catch (IOException e) {
                e.printStackTrace();
            }
        } // ENDOF method waitForConnection

        private void getStreams() throws IOException {

            output = new ObjectOutputStream(connectionSocket.getOutputStream());
            output.flush(); // flush output buffer to send header information

            input = new ObjectInputStream(connectionSocket.getInputStream());

            displayMessage("\n Got I/O Streams \n");
        } // ENDOF getStreams method

        private void processConnection() throws IOException {

            String message = null;
            sendDataToClient("Connection Successful \n");

            setMessageEnterFieldEditable(true); // enable server to type message

            do {
                try {

                    message = (String) input.readObject();
                    displayMessage("\n" + message);

                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            } while (!message.equals("CLIENT >> TERMINATE"));
        } // ENDOF processConnection method

        private void closeConnection() {

            displayMessage("\n closing connection \n");

            setMessageEnterFieldEditable(false);

            try {
                output.close();
                input.close();
                connectionSocket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF closeConnection method

        private void sendDataToClient(String messageFromServer) {

            try {
                output.writeObject("SERVER>> " + messageFromServer);
                output.flush(); // flush output to client
            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF sendDataToClient method

        private void displayMessage(String showMessage) {

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    displayArea.append(showMessage);
                }
            });
        } // ENDOF method displayMessage

        private void setMessageEnterFieldEditable(final boolean isEditable) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    messageEnterField.setEditable(isEditable);
                }
            });
        }

    } // ENDOF class server
package com.htpj.networkingChatApp;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Client extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTextField messageEnterField;
    private JTextArea displayArea;

    private String chatHost;
    private Socket clientSocket;

    private ObjectInputStream input;
    private ObjectOutputStream output;

    private String message = "";

    public Client(String host) {
        this.chatHost = host;
    }

    protected void clientGui() {
        messageEnterField = new JTextField();

        setMessageEnterFieldEditable(false);

        messageEnterField.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                sendDataToServer(e.getActionCommand());
            }
        });

        add(messageEnterField, BorderLayout.SOUTH);

        displayArea = new JTextArea();
        add(new JScrollPane(displayArea), BorderLayout.CENTER);
        displayArea.setEditable(false);

        setTitle("Chat Client");
        setSize(500, 500);
        setLocationRelativeTo(null);
        setVisible(true);

    } // END OF clientGui method

    // connect to the server and process message from server
    protected void runClient() throws UnknownHostException, IOException, ClassNotFoundException {

        // connect to server, get Streams, process connection
        try {
            connectToServer();
            getStreams();
            processConnection();

        } catch (EOFException e) {
            displayMessage("\n client closed the connection");
        } finally {
            closeConnection();
        }
    }

    private void connectToServer() throws UnknownHostException, IOException {

        displayMessage("Attempting Connection to Server: \n");

        clientSocket = new Socket(InetAddress.getByName(chatHost), 2000);
        displayMessage(
                "Connected to: " + clientSocket.getInetAddress().getHostName() + "on Port : " + clientSocket.getPort());

    } // END OF method connectToServer

    private void getStreams() throws IOException {

        output = new ObjectOutputStream(clientSocket.getOutputStream());
        output.flush();

        input = new ObjectInputStream(clientSocket.getInputStream());

        displayMessage("\n  Got I/O stream \n ");

    } // END OF getStreams method

    private void processConnection() throws ClassNotFoundException, IOException {

        displayMessage("\n connected to server\n");

        setMessageEnterFieldEditable(true);

        do {

            message = (String) input.readObject();
            displayMessage("\n" + message);

        } while (!message.equals("SERVER>> TERMINATE"));

    } // end of processConnection method

    private void closeConnection() throws IOException {
        displayMessage("\n closing connection ");
        input.close();
        output.close();
        clientSocket.close();
        setMessageEnterFieldEditable(false);

    } // end of closeConnection method

    private void displayMessage(final String messageToShow) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                displayArea.append(messageToShow);
            }
        });

    } // end of displayMessage method

    private void sendDataToServer(String messageToServer) {
        try {
            output.writeObject(messageToServer);
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } // end of sendDataToServer method

    private void setMessageEnterFieldEditable(final boolean isEditable) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                messageEnterField.setEditable(isEditable);
            }
        });
    }

}
package com.htpj.networkingChatApp;

import java.io.IOException;

public class ChatApp{
    public static void main(String[] args) {

        Server chatServer = new Server();
        Client chatClient = new Client("127.0.0.1");

        chatServer.serverGui();
        chatClient.clientGui();

         chatServer.runServer();
        try {
            chatClient.runClient();
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }

    }
}
ChatApp.java

    package com.htpj.networkingChatApp;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;

    public class Server extends JFrame {

        private static final long serialVersionUID = 1L;
        private JTextArea displayArea;
        private JTextField messageEnterField;
        private ServerSocket server;
        private Socket connectionSocket;
        private ObjectInputStream input;
        private ObjectOutputStream output;
        private int counter = 1;

        protected void serverGui() {
            messageEnterField = new JTextField();
            setMessageEnterFieldEditable(false);

            messageEnterField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    sendDataToClient(e.getActionCommand());
                }
            });

            add(messageEnterField, BorderLayout.SOUTH);

            displayArea = new JTextArea();
            add(new JScrollPane(displayArea), BorderLayout.CENTER);
            displayArea.setEditable(false); // display area is never editable

            setSize(500, 500);
            setLocationRelativeTo(null);
            setTitle("Chat Server");
            setVisible(true);

        }

        protected void runServer() {

            try {
                server = new ServerSocket(2000, 100);

                while (true) {
                    try {
                        waitForConnection(); // wait for a connection
                        getStreams(); // get input and output streams
                        processConnection(); // process connections

                    } catch (EOFException e) {
                        displayMessage("\n server terminated the connection");
                    } finally {
                        closeConnection();
                        ++counter;
                    }
                }

            } catch (IOException e) {

                e.printStackTrace();
            }

        } // ENDOF method runServer

        private void waitForConnection() {

            try {

                displayMessage("Waiting for Connection\n");
                connectionSocket = server.accept();
                displayMessage("Connection" + counter + "received from: " + connectionSocket.getInetAddress() + "port: "
                        + connectionSocket.getPort());

            } catch (IOException e) {
                e.printStackTrace();
            }
        } // ENDOF method waitForConnection

        private void getStreams() throws IOException {

            output = new ObjectOutputStream(connectionSocket.getOutputStream());
            output.flush(); // flush output buffer to send header information

            input = new ObjectInputStream(connectionSocket.getInputStream());

            displayMessage("\n Got I/O Streams \n");
        } // ENDOF getStreams method

        private void processConnection() throws IOException {

            String message = null;
            sendDataToClient("Connection Successful \n");

            setMessageEnterFieldEditable(true); // enable server to type message

            do {
                try {

                    message = (String) input.readObject();
                    displayMessage("\n" + message);

                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            } while (!message.equals("CLIENT >> TERMINATE"));
        } // ENDOF processConnection method

        private void closeConnection() {

            displayMessage("\n closing connection \n");

            setMessageEnterFieldEditable(false);

            try {
                output.close();
                input.close();
                connectionSocket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF closeConnection method

        private void sendDataToClient(String messageFromServer) {

            try {
                output.writeObject("SERVER>> " + messageFromServer);
                output.flush(); // flush output to client
            } catch (IOException e) {
                e.printStackTrace();
            }

        } // ENDOF sendDataToClient method

        private void displayMessage(String showMessage) {

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    displayArea.append(showMessage);
                }
            });
        } // ENDOF method displayMessage

        private void setMessageEnterFieldEditable(final boolean isEditable) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    messageEnterField.setEditable(isEditable);
                }
            });
        }

    } // ENDOF class server
package com.htpj.networkingChatApp;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Client extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTextField messageEnterField;
    private JTextArea displayArea;

    private String chatHost;
    private Socket clientSocket;

    private ObjectInputStream input;
    private ObjectOutputStream output;

    private String message = "";

    public Client(String host) {
        this.chatHost = host;
    }

    protected void clientGui() {
        messageEnterField = new JTextField();

        setMessageEnterFieldEditable(false);

        messageEnterField.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                sendDataToServer(e.getActionCommand());
            }
        });

        add(messageEnterField, BorderLayout.SOUTH);

        displayArea = new JTextArea();
        add(new JScrollPane(displayArea), BorderLayout.CENTER);
        displayArea.setEditable(false);

        setTitle("Chat Client");
        setSize(500, 500);
        setLocationRelativeTo(null);
        setVisible(true);

    } // END OF clientGui method

    // connect to the server and process message from server
    protected void runClient() throws UnknownHostException, IOException, ClassNotFoundException {

        // connect to server, get Streams, process connection
        try {
            connectToServer();
            getStreams();
            processConnection();

        } catch (EOFException e) {
            displayMessage("\n client closed the connection");
        } finally {
            closeConnection();
        }
    }

    private void connectToServer() throws UnknownHostException, IOException {

        displayMessage("Attempting Connection to Server: \n");

        clientSocket = new Socket(InetAddress.getByName(chatHost), 2000);
        displayMessage(
                "Connected to: " + clientSocket.getInetAddress().getHostName() + "on Port : " + clientSocket.getPort());

    } // END OF method connectToServer

    private void getStreams() throws IOException {

        output = new ObjectOutputStream(clientSocket.getOutputStream());
        output.flush();

        input = new ObjectInputStream(clientSocket.getInputStream());

        displayMessage("\n  Got I/O stream \n ");

    } // END OF getStreams method

    private void processConnection() throws ClassNotFoundException, IOException {

        displayMessage("\n connected to server\n");

        setMessageEnterFieldEditable(true);

        do {

            message = (String) input.readObject();
            displayMessage("\n" + message);

        } while (!message.equals("SERVER>> TERMINATE"));

    } // end of processConnection method

    private void closeConnection() throws IOException {
        displayMessage("\n closing connection ");
        input.close();
        output.close();
        clientSocket.close();
        setMessageEnterFieldEditable(false);

    } // end of closeConnection method

    private void displayMessage(final String messageToShow) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                displayArea.append(messageToShow);
            }
        });

    } // end of displayMessage method

    private void sendDataToServer(String messageToServer) {
        try {
            output.writeObject(messageToServer);
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } // end of sendDataToServer method

    private void setMessageEnterFieldEditable(final boolean isEditable) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                messageEnterField.setEditable(isEditable);
            }
        });
    }

}
package com.htpj.networkingChatApp;

import java.io.IOException;

public class ChatApp{
    public static void main(String[] args) {

        Server chatServer = new Server();
        Client chatClient = new Client("127.0.0.1");

        chatServer.serverGui();
        chatClient.clientGui();

         chatServer.runServer();
        try {
            chatClient.runClient();
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }

    }
}

因此,您
ChatApp
创建了一个
服务器和一个
客户端
,然后调用
runServer
,这将进入一个无限循环,因此永远无法访问
Client.runClient
。您还面临着违反Swing线程规则的风险。您不应该在事件调度线程内运行阻塞或长时间运行,也不应该从EDT上下文之外更新UI。请考虑查看更多详细信息和可能的解决方案。一般来说,您需要提高对Java和Swing中并发性的理解