[Duvida]Como parar um metodo Thread?

2 respostas
threadsprogramaçãojava
V

Olá, sou novo aqui, estou fazendo um programa que rode um ping -t em diversos IP’s, para a aplicação não travar abri uma Thread para o método e mandei executar, o sistema reconhece meu boolean (que setei True ou False, dependendo do estado) no entanto ele não interrompe ou para.

public void runSystemCommand(String command, TextArea texto, Tooltip tip) {
        Thread thread = new Thread() {
@Override
            public void run() {
                
                try {
                    if (!executando) {
                        Process p = Runtime.getRuntime().exec(command);
                        BufferedReader inputStream = new BufferedReader(
                                new InputStreamReader(p.getInputStream()));
                        String s = "";
                        texto.setWrapText(true);
                        texto.setText("\r\n");
                        executando = true;
                        // reading output stream of the command
                        while ((s = inputStream.readLine()) != null) {
                            texto.setText(texto.getText() + "\n" + s + "\n");
                            texto.setScrollTop(Double.MAX_VALUE);
                            if (texto.getText().length() > Integer.MAX_VALUE) {
                                gerarRelatorio(tip, texto);
                                texto.setText("");
                            }
                        }
} else if (executando) {
                        System.out.println("Interrompendo");
                        executando = false;
                        this.stop();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        thread.start();
}

No If e Else o sistema reconhece, mas não consigo dar thread.interrupt() ou thread.stop() pois pedi para inicializar a variavel thread. Se coloco This.stop ou this.interrupt(), simplesmente não faz nada. Alguem tem alguma luz?

2 Respostas

L

Eu não sou especialista em thread, mas eu sei que para sair de um laço, você pode usar o break; e se eu não me engano também você deveria usar o thread.interrupt(); para exatamente interromper a execução. Porém como a sua variável de instancia está acima do contexto, eu não sei se o interrupt pode te ajudar…
Tenta rever seu código, criando uma classe que implementa Runnable e separa as responsabilidades de execução…
Tem um site legal que eu aprendi muito de Thread que vc pode encontrar uma pancada de exemplos bons, que é o Java2s…

V

No caso, o while não tem problema, consigo sair dele a qualquer momento quando eu lanço o evento no JAVAFX, tanto que ele me printa o ELSE: “Interrompendo” porém quando eu mando dar interrupt(), o comando não deveria parar de ser executado? E consequentemente o ping deveria parar de ser inserido no TextArea?

Vale lembrar que se eu passar a variável thread a qual instancio no inicio do metodo, ele não reconhece, então usei o “this.interrupt()” para tentar pausar esse processo.

O real problema é que quando eu executo
> Process p = Runtime.getRuntime().exec(command);

ele vai executar

ping 192.168.1.119 -t

mas como que irei pausar este ping? Pensei em dar interrupt() para parar a thread, mas não esta funcionando.
Ou sera que eu mando um comando pro CMD, para reconhecer o CTRL C ?

Criado 10 de agosto de 2017
Ultima resposta 10 de ago. de 2017
Respostas 2
Participantes 2