Thread Exception [RESOLVIDO]

Bom dia galera… estou tentando receber informações de 2 rastreadores em um servidor que fara o tratamento das mesmas…mais estou com um probleminha…

vamos lá…

Inicio o servidor e o primeiro rastreador se conecta e começa a me enviar suas informaçoes… até ai blz… o segundo rastreador se conecta tambem… as conexões estão funcionando.
mais quando o segundo rastreador me envia sua primeira mensagem me da a seguinte exceção

Exception in thread "Thread-3" java.lang.IndexOutOfBoundsException: end at java.util.regex.Matcher.region(Unknown Source) at java.util.Scanner.findPatternInBuffer(Unknown Source) at java.util.Scanner.findWithinHorizon(Unknown Source) at java.util.Scanner.nextLine(Unknown Source) at tracker.server.Servidor.run(Servidor.java:60)

não sei o porque ela aparece sendo que os clientes(rastreadores) estão em theads diferentes e cada um executa seu metodo de recebimento de informações separadamante.

att. Matheus

Você está reaproveitando o objeto do tipo Scanner em várias threads? Não faça isso - vai dar problemas

Desculpe aqui vai o código:

[code]

// metodo run oque a thead executa.
public void run() {

	try {

		while (true) {

			conexao1 = servidor.accept();
			testa = true;
			System.out.println("Conectado.");
			TELA_Server.getTelaprincipal().append(
					"Conectado ao servidor : "
							+ conexao1.getInetAddress().getHostAddress()
							+ "\n");

			GetInfo();
			//enviaInfCliente();

		}

	} catch (IOException e) {
		e.printStackTrace();
		System.out.println("IOException " + e);
	}
}

// metodo que recebe as inf dos rastreadores e envia para um textArea
public static void GetInfo() {

	try {
		entrada = new Scanner(conexao1.getInputStream());
		while (entrada != null) {

			Recebida = entrada.nextLine(); // o ERRO DA NESSA LINHA

			System.out.println("RECEBIDO CLIENTE: " + Recebida);
			TELA_Server.getTelaprincipal().append(Recebida + "\n");

		}
	} catch (Exception e) {
		e.printStackTrace();
		System.out.println("ERRO:" + e.getMessage());
	}

}[/code]

como poderia fazer então ? não utilizo mto theads 1° projeto :oops: sry

poderia me dar uma dica ?

A primeira coisa errada é o uso de métodos estáticos - só de ver isso já vi que a variável “entrada” é estática e está sendo compartilhada por todas as threads, o que vai dar problemas.

Está statico mesmo U.u vou tirar isso

Posso fazer assim ? ou ainda ta mto ruim ? hehe

[code]public static void GetInfo() {

	Scanner entrada;
	try {
		entrada = new Scanner(conexao1.getInputStream());
		while (entrada != null) {

			Recebida = entrada.nextLine();

			System.out.println("RECEBIDO CLIENTE: " + Recebida);
			TELA_Server.getTelaprincipal().append(Recebida + "\n");

		}
	} catch (Exception e) {
		e.printStackTrace();
		System.out.println("ERRO:" + e.getMessage());
	}

}

[/code]

Não sou eu que tenho de dizer que “pode fazer assim”. Veja se está funcionando primeiro :slight_smile:

Isto posto, recomendo fortemente que você evite usar métodos estáticos em seus programas, a menos que você saiba o que está fazendo.

CARA se é foda ! ahahah Vlw mesmo… funcionou Agora vou utilizar melhor esses Estáticos… poderia me dizer um local onde é “seguro” utilizalos ?

Static é igual à história do goto - só a prática vai lhe dizer quando é seguro utilizar. Não tenho uma receita de bolo

Entendi… a prática leva a perfeição… Obrigado entanglement :smiley: