Thread Exception [RESOLVIDO]

10 respostas
M

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

10 Respostas

E

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

M

Desculpe aqui vai o código:

// 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());
		}

	}
M

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

poderia me dar uma dica ?

E

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.

M

Está statico mesmo U.u vou tirar isso

M

Posso fazer assim ? ou ainda ta mto ruim ? hehe

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());
		}

	}
E

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.

M

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

E

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

M

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

Criado 21 de março de 2012
Ultima resposta 21 de mar. de 2012
Respostas 10
Participantes 2