Erro "Louco" na aplicação do java

10 respostas
K

Bom gente, hoje terminei um projeto meu para minha empresa, tive vários bugs com ele e consegui concertar…

O programa usa BD Access, no inicio eu não estava conseguindo ter acesso ao BD, só funcionava usando netbeans. Resolvi, era incompatibilidade entre 32 e 64bit.
Reinstalei tudo e baixei o office 2010 64bit, jdk 64bit, netbeans 64bit, sistema de bd 64bit disponibilizado no site da micrososft.

Em meu computador está correndo tudo perfeitamente… Ai fui instalar em outra máquina da empresa.
Instalei todos os programas iguais aos que instalei no meu, até o office e o sistema de BD.

Oque ocorre:
1- No programa as vezes eu precisei transformar de Moeda"real" para double para fazer cálculos e voltar em seguida para moeda “real” (Usando uma função que me ajudaram aqui.), só que la na outra máquina ele não ativa esta função… fik com o “.” do double em vez da transformação para “,”.
2- O programa errou 2 cálculos matemáticos básicos. no meu dando resultado certo e na outra maquina dando resultado até negativo.

Bom lembrando que o programa e o mesmo, tanto compilado na minha maquina como na outra… Isto também está ocorrendo na outra máquina se eu abrir o programa pelo netbeans.
Acredito que não é erro de transferência do BD ao programa pois ate metade do programa ele esta acertando os cálculos tudo certo. então está puxando dados do banco corretamente.

Não faço idéia do que seja isso… Alguém por favor sabe a solução?

Edit----
Instalei no meu notebook e deu tudo certo… não entendo oque tem na outra maquina de errado.

10 Respostas

R

Não sei se tem haver mas verifica se o formato de data e hora, decimais, moeda etc… de uma maquina esta igual a outra. Ja vi programas (Não era em java) dar problema por causa das configurações do Windows.

Rodrigo_Vieira_Pinto

Você está realizando os cálculos no access?

Se sim, sugiro passar para o java e use o access apenas para armazenamento. Crie classes que encapsulem cálculos monetários. Bons exemplos de classes assim você encontra nesses livros:

http://books.google.com.br/books/about/Test_Driven_Development.html?hl=pt-BR&id=gFgnde_vwMAC
http://books.google.com.br/books?id=vpHqYZcmeKsC&printsec=frontcover&dq=padroes+de+arquitetura+de+aplica%C3%A7%C3%B5es+corporativas&source=bl&ots=oGwVA4q0U8&sig=lRCy7uviOXpDUb2bp8UYHDAMMGU&hl=pt-BR&sa=X&ei=nvIDULrcI5S60QG4o_21Bw&ved=0CD0Q6AEwAA#v=onepage&q=padroes%20de%20arquitetura%20de%20aplica%C3%A7%C3%B5es%20corporativas&f=false

Só dá uma olhada na questão de performance (que acredito não será problema).

R

Bem provável mesmo.

Na maquina que dá erro é 32 ou 64 bits? O jre que roda o copilado é 64 ou 32 bits?
As vezes dá erros de Locale e precisão aritimética copilar em 64 bits e rodar em 32…

E

Não tem nada a ver haver erros em contas só porque está usando 32 ou 64 bits.

Absolutamente nada a ver, já que a parte de contas é feita pelas instruções de processamento de ponto flutuante que não mudaram muito desde a introdução do Pentium MMX.

Normalmente é porque o cara não testou os programas em uma máquina Windows em português e em inglês; isso costuma dar problemas de pontos e vírgulas decimais.

R

entanglement:
Não tem nada a ver haver erros em contas só porque está usando 32 ou 64 bits.

Absolutamente nada a ver, já que a parte de contas é feita pelas instruções de processamento de ponto flutuante que não mudaram muito desde a introdução do Pentium MMX.

Normalmente é porque o cara não testou os programas em uma máquina Windows em português e em inglês; isso costuma dar problemas de pontos e vírgulas decimais.

Já tive perda de precisão com double e float em casas decimais altas… por causa de processador 32-64. (significancia de bits)
Então não é “nada haver”… é só usar BigDecimal para resolver…

E
  1. Algum professor de português (que deve ter ensinado aquela professora de português que mandou bater em uma criança - ela era um pouco mais analfabeta que o pessoal que anda por aí :frowning: ) andou espalhando por aí que o correto é “nada haver” - “Nada haver” é uma outra coisa que não tem nada a ver.

  2. Você está confundindo a declaração da variável (float = 32 bits, double = 64 bits, long double em algumas linguagens = 80 bits) com a versão do sistema operacional - quem faz as contas de ponto-flutuante não é o sistema operacional e sim o processador, através daquelas instruções da FPU (fadd, fmul, fdiv, fsub) ou então do SSE2/SSE3 (no caso de double, addpd, addsd, mulpd, mulsd, divsd, divpd, subsd, subpd, e no caso do float, addps, addss, mulps, mulss, divss, divps, subss, subps).
    As contas são feitas do mesmo jeito, quer sejam feitas pelo Excel, pelo Java, pelo C++ ou pelo VB. A conversão é que pode talvez seja feita de formas um pouco diferentes de uma linguagem para outra.

R

Em algum momento voce transforma string para algum Number ou vice-versa.

Dou 95% a 99,99% de chances do erro que voce está percebendo estar neste trecho de código.

Tive a esperiência de perder precisao em um framework já pronto (www.castor.org) quando lia um arquivo (“String”) para setar em um double, isto ocorria porque o framework utiliza o metodo toString() para fazer o parsing.

Tudo ocorria normalmente no ambiente de desenvolvimento com windows em portugues mas em produção dava “caca” pois era ingles.
Corrigi este problema tratando “pessoalmente” o parsing fazendo com que independentemente do SO ou linguagem do SO (locale) o funcionamento seria sempre o mesmo pois o ambiente de produção não poderia ser modificado.

K

A outra máquina que está dando o erro, é do mesmo windows que o meu. “Mesmo CD e tudo.”…
Inglês, tudo igual.

Irei desinstalar tudo de java e office, access em geral.

Obs: Ambas as máquinas são 64bits.
Ambas são windows 7(Inglês)
A instalação em um notebook também 64bit ocorreu tudo certo, nenhuma conta errado… nenhum local sem as virgulas devidas.
Todas as contas matemáticas estão sendo efetuadas no programa, utilizando rotinas.

Acredito que no programa esteja tudo certo, pois se 2 máquinas estão com tudo 100% rodando, e só 1 deu problema… creio que deve ter algo nela.
Vou verificar também este negócio da configuração interna do windows… desde configuração de data, teclado, em geral… já que informaram que pode afetar no programa.

E

Qual é a tal rotina que você está usando?
Que número que você está usando que dá o resultado errado?
Você está provavelmente procurando no lugar errado.

R

Bom… Acho que só restou A JVM, elas são iguais?

Criado 15 de julho de 2012
Ultima resposta 17 de jul. de 2012
Respostas 10
Participantes 6