Coordenar a execução de tarefas (aguardar a conclusão de uma para depois executar a outra)

1 resposta
Z

Boa tarde,

Estou tendo dificuldades com um código (resumido abaixo), pois o mesmo está executando as condicionais if/else antes de terminar de executar a função [color=red]triggerCaptcha(status, rcd, true)[/color];

protected static Map<instanciaUsuario, BotEye> _activeEyes;

public boolean reportStatus (.....)
{
	...

	triggerCaptcha(status, rcd, true); //essa função é executada porém antes de terminar completamente o código já executa o if seguinte.

	if (condicao for verdadeira) //esse if eu quero que execute apenas quando de fato toda e qualquer operação anterior já tiver sido concluída.
	{
		logout();
	}
	else
	{
		...
	}
	return true
}

aqui alguns detalhes da função triggercaptcha, que exibe um html com algumas informações e um captcha para ser preenchido [color=red]em até 30seg[/color] (valor da variável [color=green]seconds[/color]).

private static void triggerCaptcha(usuario, rcd, Effect)
{	
	HtmlMessage.setHtml("msg do html contendo o captcha");
	usuario.sendPacket( HtmlMessage );
	if (Effect)
	{
		usuario.setIsImmobilized(true);
		usuario.setIsInvul(true);
		_activeEyes.put(usuario, new BotEye(usuario, rcd, seconds));
        }
}
detalhes do boteye.
private final static class BotEye implements Runnable
{
    	 
        private ScheduledFuture<?> _task;
        private int _delay;
        public ReportedCharData _rcd;
        private instanciaUsuario _usuario;
 
        public BotEye(usuario, rcd, delay) {
            _usuario = usuario;
            _delay = delay;
            _rcd = rcd;
            run();
        }

        @Override
        public void run() {
            if (_delay < 1) {
            	blablabla...
                return;
            }
            handleTick();
            _task = ThreadPoolManager.getInstance().scheduleGeneral(this, 1000);
            _delay--;
        }
 
        public void cancel() {
            if (_task != null) {
                _task.cancel(true);
            }
        }
	private void handleTick() {
            switch (_delay) {
                case 30:
                	_usuario.sendMessage("falta 30seg");
                	break;
                case 10:
                	_usuario.sendMessage("falta 10seg");
                	break;
                case 5:
                case 4:
                case 3:
                case 2:
                case 1:
                	_usuario.sendMessage("falta 1seg");
                    break;
            }
        }
}

Como faço para que de fato as condições if/else sejam apenas executadas após o usuário terminar de responder o captcha??

1 Resposta

Jonas_B_a_r_r_o_s
//talvez seja melhor essa classe nao ser final

private final static class  BotEye implements Runnable {

public void run() {//coloque aqui o que seja que seja executado primeiro

segmento1();

}

public void segmento1() {//aqui o que deseja que seja executado segundo

segmento2();

}

public void segmento2() {//aqui terceiro

segmento3();

}

//assim por diante, quantos desejar

}
class Teste {

public static void main (String args[]) {

Runnable tarefa = new BotEye();

Thread minhaTarefa = new Thread(tarefa);
minhaTarefa.start();
	//Aqui executará o metodo de Runnable, o run()...e por consequente os outros subsequentes
}

}

Criado 28 de setembro de 2015
Ultima resposta 3 de abr. de 2016
Respostas 1
Participantes 2