如何修复输出被

时间:2016-06-05 22:38:05

标签: java user-input irc

所以,我正在尝试创建一个函数(如果不是很漂亮),不使用Java编写的IRC客户端。我几乎所有工作都有效,唯一的问题是我目前正在使用System.in获取用户输入。如果频道中的其他人在我打字的过程中发送了一条消息,它会切断我现在拥有的内容,我需要猜测我在字符串中的位置。我想知道是否有办法将用户输入与程序输出分开,这样就不会发生这种情况。这是有问题的代码:

new Thread(() -> {
            while(connected[0]) {
                String output = sc.nextLine();
                if(!output.startsWith("~") && !output.startsWith("/")) {
                    try {
                        writeToSocket("PRIVMSG " + focused[0] + " " + output);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(output.substring(1).toLowerCase().startsWith("quit")) {
                    String[] split = output.substring(5).split(" ");
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < split.length; i++) {
                        if(i == 0) {
                            sb.append(split[i]);
                        }
                        sb.append(" ").append(split[i]);
                    }
                    try {
                        writeToSocket("QUIT " + sb.toString());
                        connected[0] = false;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }else if(output.substring(1).toLowerCase().startsWith("focus")) {
                    String get = output.substring(7);
                    if(!channels.contains(get)) {
                        print("Not connected to channel");
                    }else {
                        try {
                            writeToSocket("PART " + focused[0]);
                            writeToSocket("JOIN " + get);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        focused[0] = get;
                    }
                }else if(output.substring(1).toLowerCase().startsWith("join")) {
                    String get = output.substring(6);
                    channels.add(get);
                }

                if(output.startsWith("/") && output.substring(1).toLowerCase().startsWith("msg")) {
                    String[] split = output.substring(5).split(" ");
                    String username = split[0];
                    StringBuilder msg = new StringBuilder();
                    for(int i = 1; i < split.length; i++) {
                        if(i == 1) {
                            msg.append(split[i]);
                            continue;
                        }
                        msg.append(" ").append(split[i]);
                    }
                    try {
                        writeToSocket("PRIVMSG " + username + " " + msg.toString());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

0 个答案:

没有答案