Pergunta

Eu estava pensando como eu iria deixar meu programa java continuar em execução, mas sempre estar pronto para assumir de entrada.

Agora eu estou usando um bufferreader e leitura em uma linha, mas que faz minha parada programa e espera para a entrada. Eu quero o programa para continuar funcionando, mas estar pronto para receber a entrada sempre que necessário, há uma maneira de fazer isso?

Foi útil?

Solução

Eu esperaria que você vai ter que olhar para multithreading sua aplicação, a fim de obter esse trabalho como você deseja.

Editar : É claro que, enquanto essa funcionalidade pode ser alcançado através de uma interface puramente CLI, você provavelmente seria melhor fora de explorar outras opções (isto é GUI opções) se você pretende ter uma resposta completa / sistema orientado a eventos em execução em uma forma com vários segmentos.

Outras dicas

Aqui está um exemplo rápido de como um aplicativo de interface de linha de comando de multi-threaded pode funcionar. Isso não vai exigir de votação para a entrada, nem uma interface GUI, a fim de executar tarefas em segundo plano enquanto se espera para a entrada de um usuário em um console.

Neste exemplo, um Thread está sendo executado em segundo plano, o que pode ser dito para a saída de uma saudação em um número especificado de segundos mais tarde.

public class CommandLineMultiThread
{
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);

        // Makes and runs the background thread.
        MyThread myThread = new MyThread();
        Thread t = new Thread(myThread);
        t.start();

        // Get the number of seconds to wait from the console.
        // Exit when "0" is entered.
        int waitDuration;
        do
        {
            waitDuration = s.nextInt();
            myThread.setGreetIn(waitDuration);

        } while (waitDuration != 0);

        myThread.quit();
    }

    static class MyThread implements Runnable
    {
        boolean running = true;                // Boolean to keep thread alive.
        long greetingTime = Long.MAX_VALUE;    // Time to greet at.

        public void setGreetIn(int i)
        {
            greetingTime = System.currentTimeMillis() + (i * 1000);
        }

        public void quit()
        {
            running = false;
        }

        public void run()
        {
            while (running)
            {
                if (System.currentTimeMillis() > greetingTime)
                {
                    System.out.println("Hello!");
                    greetingTime = Long.MAX_VALUE;
                }

                try
                {
                    Thread.sleep(100);
                }
                catch (InterruptedException e) {}
            }
        }
    }
}

A classe Scanner pode ser usado para aceitar a entrada de utilizador a partir da interface de linha de comando através do encaminhamento a entrada a partir do rel System.in objeto.

Em seguida, enquanto o myThread segmento de segundo plano está em execução, o segmento principal está esperando por uma entrada de System.in através do Scanner.nextInt método. Uma vez que os segundos de espera foi aceite, a discussão de fundo é dito para esperar até um certo tempo, e uma vez que chega esse tempo, o Hello! saudação é a saída para o console.

Eu acho que o programa terá que ocasionalmente votação para entrada do usuário.

Dê-lhe um GUI multi-rosqueada agradável em vez de um CLI:)

Concordo com James, outra alternativa é "fingir" programa contínuo em execução. Isso não vai funcionar com todos os cenários, mas você pode definir um direito temporizador antes de exibir a entrada do usuário, em seguida, calcular o tempo entre a parada e "start" novamente quando o usuário insere algo.

Use esse tempo para executar uma função repetido um determinado número de vezes. Esta é apenas útil se você tem algo em si mesmo um temporizador já, como uma constante drenagem inteiro a cada poucos segundos.

Um exemplo:

Você pergunta ao usuário uma pergunta mas apenas quer dar-lhes 5 segundos para resposta. Quando as respostas de usuários (acessos entrar) o programa irá calcular o tempo que levou-os a entrar, se muito tempo, lançar uma mensagem, se abaixo do limite de tempo de jogar outro.

Eu só estou sugerindo que este método porque threading, que é o que você realmente quer entrar, é bastante avançada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top