Ввод Java без пауз - PullRequest
       3

Ввод Java без пауз

0 голосов
/ 21 сентября 2011

Как бы я создал консоль для своей программы, не останавливая мой код?Например, у меня есть цикл, который должен продолжать работать, но когда я ввожу команду в консоли, я хочу, чтобы игра проверила, что это была за команда, и обработала ее в цикле.Цикл не должен ждать команды, а просто должен иметь оператор if, чтобы проверить, есть ли команда в очереди.

Кстати, я делаю выделенный сервер, если это помогает.

Ответы [ 5 ]

2 голосов
/ 21 сентября 2011

Пусть они запускаются в двух отдельных потоках.

class Server {

    public static void main(String[] args) {
        InputThread background = new InputThread(this).start();
        // Run your server here
    }
}

class InputThread {
    private final Server server;
    public InputThread(Server server) {
        this.server = server;
    }

    public void run() {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()) {
            // blocks for input, but won't block the server's thread
        }
    }
}
2 голосов
/ 21 сентября 2011

То, что вы хотели бы иметь, это поток, в котором вы выполняете код чтения команд. Вероятно, это будет выглядеть примерно так:

class ReadCommand implements Runnable
{
    public void run()
    {
       // Command reading logic goes here
    }
}

В вашем "основном" потоке, где выполняется остальная часть кода, вы должны будете запустить его так:

new Thread(new ReadCommand())).start()

Кроме того, вам нужна где-то очередь команд, которая заполняется из ReadCommand и считывается из другого кода. Я рекомендую вам прочитать руководство по параллельному Java-программированию.

2 голосов
/ 21 сентября 2011

Существует довольно очевидный подход: использовать выделенный поток, чтобы ожидать InputStream, читать события / команды из него и передавать их в очередь.

И ваш главный поток будет регулярно проверять эту очередь. После каждой проверки он будет либо обрабатывать команду из очереди, либо продолжать выполнять то, что делал, если он пуст.

1 голос
/ 21 сентября 2011

Сервер должен работать в своем собственном потоке.Это позволит циклу работать без остановки.Вы можете использовать очередь для передачи команд на сервер.Каждый раз в цикле сервер может проверять очередь и обрабатывать одну или несколько команд.Затем командная строка может отправлять команды в очередь по своему собственному расписанию.

0 голосов
/ 21 сентября 2011

Вы можете читать с консоли в отдельном потоке. Это означает, что ваш главный поток не должен ждать консоли.

Даже серверные приложения могут иметь графический интерфейс Swing. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...