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
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