estou tendo o seguinte problema. Tenho um metodo de uma classe que se chama double leSaida();
Este metodo eh chamado diversas vezes por 2 threads diferentes, para tentar achar o erro eu fiz o seguinte
public double leSaida(){
double saida=0;
int tamanho=saidas.size()-1;
Quando eu rodo minha aplicacao, em determinado momento eu tenho a saida:
aaaaaahhhhhhhhhhhh
4
3
3.1999755859375
ou seja, ele tenta ler o valor do array saidas, nao consegue e entra no catch. Dentro do catch ele consegue fazer tudo certinho.
O que eu nao entendo eh porque ele nao consegue achar esse valor logo de primeira. Alguem saberia me dizer:??
utilize a tag code no seu código para facilitar pra galera.
Se possível, poste aqui o stacktrace da sua sua exceção, para nos ajudar a localizar o erro.
Eu arriscaria dizer, já que você disse que está usando threads, que o List saidas ainda não está inicializado no momento do try.
Abraços
estou tendo o seguinte problema. Tenho um metodo de uma classe que se chama double leSaida();
Este metodo eh chamado diversas vezes por 2 threads diferentes, para tentar achar o erro eu fiz o seguinte
Quando eu rodo minha aplicacao, em determinado momento eu tenho a saida:
aaaaaahhhhhhhhhhhh
4
3
3.1999755859375
ou seja, ele tenta ler o valor do array saidas, nao consegue e entra no catch. Dentro do catch ele consegue fazer tudo certinho.
O que eu nao entendo eh porque ele nao consegue achar esse valor logo de primeira. Alguem saberia me dizer:??
Obrigado[/quote]
O problema esta na linha do try:
saida=(Double)saidas.get(tamanho);
Isso ocorre porque o atributo saida é do tipo primitivo double e você esta tentando setar com um objeto Double.
No catch funciona porque no você esta jogando no println o objeto sem tentar setar no atributo saida e o println aceita objetos.
Exception in thread “Thread-5” java.lang.NullPointerException
at Motor.TesteMotorVirtual.leSaida(TesteMotorVirtual.java:44)
at Motor.MotorVirtual.leSaida(MotorVirtual.java:38)
at Seguranca.Seguranca.motorOK(Seguranca.java:73)
at Seguranca.Seguranca.avaliaMotor(Seguranca.java:87)
at Seguranca.Seguranca.run(Seguranca.java:65)
TesteMotorVirtual.leSaida
[code]public double leSaida(){
double saida=0;
int tamanho=saidas.size()-1;
A classe seguranca eh uma Thread independente que fica rodando e lendo a saida do motor, se a saida for maior ou menor do que o estipulado, ela vai parar o motor. mas o problema esta no le saida do motor
Por um acaso, se muitas Threads tiverem lendo varias vezes os valores de um unico ArrayList, isso pode dar problema/?? Que eu acho que talvez seja isso que esteja acontecendo comigo…
Problema resolvido…
Uma das threads que acessava o array estava tinha sido configurada (erroneamente) para dormir por 0 milisegundos, ou seja, ficar constantemente acessando o array. Isso estava baguncando o array. Na verdade eu nao sabia que isso era pra dar problema, mas quando eu arrumei o tempo do sleep parou de dar problema!!