簡體   English   中英

用戶輸入在Java線程中不起作用。 我究竟做錯了什么?

[英]User input does not work within a java thread. What am I doing wrong?

好的,我正在嘗試制作一個簡單的聊天服務器和客戶端。 該程序是聊天服務器。 我有兩個正在運行的線程。 第一個線程處理所有客戶端,並使用ServerSocket將每個新客戶端綁定到新套接字,而第二個線程現在允許用戶向連接的客戶端發送消息。 但是,我無法從該線程中獲取用戶輸入! 語句“ String inputvar = br.readLine()”將不會執行! 我究竟做錯了什么?

public void relay() throws IOException
        {
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                        try{
                            try
                            {
                            while (true)
                            {

                                Socket socket2 = null;       
                                Socket socket1 = socketmethod(socket2,0); 
                                System.out.println(socket1);
                                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                                while (socket1 != null)
                                { 
                                        PrintWriter outputriver = new PrintWriter(socket.getOutputStream(),true);
                                        boolean cfd = true;
                                        while(cfd==true)
                                        {

                                            System.out.println("this worked");
                                            System.out.print("Message: ");
                                            String inputvar = br.readLine();
                                            System.out.println("this worked2");
                                            if (inputvar.equals("disconnect_now"))
                                            {
                                                cfd = false;
                                            }
                                            outputriver.println("Unknown User: " + inputvar);

                                        }
                                }   
                            }
                            }
                            finally
                            {
                              System.out.println("error 1");
                            }
                        }
                        catch (IOException e)
                        {

                            System.out.println("Unexpected error: IOException in thread2");
                        }
                }
            }).start(); 

我無法從您的代碼中得知您正在開始接受客戶端連接。 我希望看到這樣的事情...

public void replay() {
    try {
        serverSocket = new ServerSocket(port);

        while(true) {
            try {
                final Socket connection = serverSocket.accept();

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                            String value = br.readLine();

                            PrintWriter pw = new PrintWriter(connection.getOutputStream(), true);
                            pw.println(value);

但是,如果您接受具有多個線程的多個客戶端請求,則它們將在br.readline()上阻塞,因為它們爭奪System.in

還要確保您的輸入發送了正​​確的“換行”字符,以滿足readline()要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM