Разорвать бесконечный цикл - PullRequest
1 голос
/ 19 января 2011

У меня есть бесконечный цикл, примерно такой:

while(true) {
    //do something
}

Я бы хотел иметь возможность разорвать цикл, используя ключ для exaple escape-ключа.Я думаю, что это можно сделать с помощью событий, но, поскольку я новичок в Java, я не могу этого сделать.Может кто-нибудь мне помочь?Заранее спасибо!

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


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

Ответы [ 7 ]

3 голосов
/ 19 января 2011

Используйте ключевое слово break. Например:

try {
  Console console = new Console();
  while(true)
  {
    String input = console.readLine();
    if("quit".equals(input))
    {
       break;
    }
    // otherwise do stuff with input
 }
catch(IOException e)
{
  // handle e
}

Многие программисты считают, что следующее будет более читабельным:

try
{
  Console console = new Console();
  for(String input = console.readLine(); !"quit".equals(input); input = console.readLine())
  {
     // do stuff with input
  }
}
catch(IOException e)
{
  // handle e
}
3 голосов
/ 19 января 2011

Чистая Java сама по себе не имеет понятия о вводе с клавиатуры. Вы обычно получаете их из определенного модуля ввода-вывода (например, на основе консоли, на основе AWT, на основе Swing и т. Д.).

Затем вы проверите состояние или перерыв. Если ваше уведомление о печати является асинхронным, вы, вероятно, установили бы какой-нибудь флаг (например, breakRequested) и проверили бы этот флаг и сломали его, если он изменился.

Для доступа к консоли взгляните на http://download.oracle.com/javase/6/docs/api/java/io/Console.html но обратите внимание на многие вопросы об этом объекте здесь, на Stackoverflow.

1 голос
/ 19 января 2011

изменяется пока (true) на что-то вроде while (! IsStopped ()) {...}

0 голосов
/ 07 ноября 2017

Чтобы разорвать бесконечный цикл с условием.

открытый класс whileInf {

public static void main(String[] args)  {
    int i = 0;

    while (true) {
        if (i == 10) {
            break;
        }
        System.out.println("Hello");
        i++;
    }
}

}

0 голосов
/ 16 мая 2015

Я создал эту программу, которая завершает бесконечный цикл при нажатии определенной клавиши:

class terminator {
    public static void main(String args[]) throws java.io.IOException {
        char press, clear;

        for(;;) {
            System.out.print("Press any key to get display, otherwise press t to terminate:  ");
            press = (char)System.in.read();

            System.out.println("You Pressed: "+ press);

            do {
                clear = (char)System.in.read();
            } while(clear != '\n');
            System.out.println("\n");
            if (press=='t'|press=='T') {
                System.out.println("Terminating Program......Program Terminated!");
                break;
            }
        }
    }
}
0 голосов
/ 01 июля 2011
while(true)
{
   if(   )
   {
        break;
   }
   else if()
   {
        break;
   }
   else
   {
        do something;
        break;
   }
}
0 голосов
/ 19 января 2011

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

while(_flag) 
{
   //Spin
}
...