Java - цикл при сохранении работоспособности другого кода - PullRequest
1 голос
/ 17 октября 2011

Я не уверен, как это сделать.Я хочу иметь таймер, который будет держать цикл включенным вечно, но пока он работает, я хочу, чтобы сканер работал и ожидал ввода данных пользователем.В основном, как чат.Где цикл будет постоянно проверять наличие новых сообщений, но пока он работает, пользователь может отправлять сообщения.

Как я могу это сделать?

Также у меня пока нет настройки графического интерфейса,Все это выполняется в простой командной строке (если это имеет значение).

Ответы [ 4 ]

3 голосов
/ 17 октября 2011

Вы можете использовать шаблон проектирования Worker Thread для разработки этого.Пожалуйста, обратитесь к следующим ссылкам, чтобы получить больше информации об этом:

1 голос
/ 17 октября 2011

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

: Попробуйте просто определить таймер и добавить к нему таймер, а затем ввести вход в цикл:

    Scanner scan = new Scanner(System.in);
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            //Do whatever you want with your messages here
        }
    }, 0, 1000);

    //Wait for user input
    while(true) {
        String bar = scan.next();
    }
0 голосов
/ 17 октября 2011

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

Если вы читаете из InputStream (или одного из его подклассов), вы можете вызвать метод available, чтобы проверить и посмотреть, есть ли количество доступных байтов, если> 0 (если есть что-то, что нужночитать либо из других участников чата, либо из пользовательского ввода).

Итак, цикл:

  • if (newMessages) ... публиковать новые сообщения ...
  • if (newUserChat) ... отправить новое сообщение ...

Это в основном все, что нужно сделать.

0 голосов
/ 17 октября 2011

Вы можете запустить поток, который ожидает ввода.Как только ввод введен, основная программа может вызвать метод в потоке, который затем может решить, завершить ли цикл или продолжить работу.

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