NumberFormatException

Caused by: java.lang.NumberFormatException: For input string: ".20707E.420707E4"
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
	at java.lang.Double.parseDouble(Double.java:510)
	at java.text.DigitList.getDouble(DigitList.java:151)
	at java.text.DecimalFormat.parse(DecimalFormat.java:1303)
	at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1544)
	at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1264)
	at java.text.DateFormat.parse(DateFormat.java:335)
	at br.com.telenews.control.action.PautaAction.buscar(PautaAction.java:243)
	... 37 more

Esse erro já está me atormentando. Em algumas ações eu recarrego uma página através do ajax. No exato momento que acontece esse erro deveria ocorrer a passagem de uma String para data como abaixo:

Date dt = Util.SDF_DATA.parse(data);

O engraçado é que eu mando imprimir a String da data momentos antes dessa conversão é a data está correta. Alguem sabe o que pode estar gerando esse erro?

Por acaso o seu DateFormat foi declarado como uma variável “static”? Tem um cheirinho…

Vou postar uma solução (que postei no ano passado) a um problema que ocorre quando DateFormat é posto em uma variável estática. Ocorreu com outra pessoa no ano passado :stuck_out_tongue: portanto procure no fórum o que ocorreu com ela.

import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

class TesteSimpleDateFormatThreadSafe implements Runnable {
    
    private static DateFormat staticDf;
    static {
        staticDf = new SimpleDateFormat ("yyyy-MM-dd");
        staticDf.setLenient (false);
    }
    
    /** Isto declara uma instância de SimpleDateFormat para cada thread que acessa sua servlet */
    ThreadLocal tl = new ThreadLocal() {
        protected synchronized Object initialValue() {
            DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");
            df.setLenient (false);
            return df;
        };
    };

    /** Isto mostra como obter a variável "threadLocal" */
    public void efetuaTeste() {
        DateFormat df = (DateFormat) tl.get();
        System.out.println (df.format (new Date()));
    }
 
    /** Para o teste de threads */
    public void run() {
        while (true) {
            DateFormat df = (DateFormat) tl.get();  // --&gt método correto
//            DateFormat df = staticDf;               // --&gt método incorreto
            String s = df.format (new Date());
            if (!s.equals ("2007-04-16")) { // por favor, altere isto em uma outra data
                System.out.println ("Erro! " + s);
                break;
            }
        }
    }
    
    /** 
     * O teste a seguir reproduz o seu erro se você descomentar
     * a linha escrita "método incorreto" e não dá erro se você 
     * descomentar a linha escrita "método correto" acima.
     */
    public static void main(String[] args) {
        TesteSimpleDateFormatThreadSafe teste = new TesteSimpleDateFormatThreadSafe();
        for (int i = 0; i &lt 10; ++i) {
            new Thread (teste).start();
        }
    }
}

Bem que tentei achar esse seu tópico para entender um pouco mais sobre isso tudo.

No fim não adianta muito ter um objeto DateFormat static sendo que vou ter de ter uma instância para cada tread que acessa?