Calendar/Timestamp erro [resolvido]

O que estaria errado?

Calendar data = Calendar.getInstance();
Timestamp competencia = new Timestamp( data.getTimeInMillis() );

O erro apresentado é:
java.lang.IllegalAccessError: try to access method java.util.Calendar.getTimeInMillis()J from class …

É… o erro é básico, eu sei… :slight_smile:
Mas deu branco total

Estranho… Calendar é classe abstrata, não deveria poder ser instânciada… :shock:

Mas faz assim:

Calendar data = new GregorianCalendar();
Timestamp competencia = new Timestamp( data.getTimeInMillis() ); 

[quote=Maurício Linhares]Estranho… Calendar é classe abstrata, não deveria poder ser instânciada… :shock:
[/quote]

Certo. Realmente não pode ser instânciada. Mas o Zevang não tá instânciando a classe Calendar, ele tá chamando o método getInstance() da classe Calendar que por sua vez chama o método estático getCalendar(…)

    private static Calendar createCalendar(TimeZone zone,
					   Locale aLocale)
    {
	if (aLocale.getLanguage().compareTo("th") == 0) {
	    if (aLocale.getCountry().compareTo("TH") == 0) {
		return new sun.util.BuddhistCalendar(zone, aLocale);
	    }
	}

	// else create the default calendar
        return new GregorianCalendar(zone, aLocale);	
    }

O problema parece ser o seguinte: o método getTimeInMillis() é “public” em java 1.4 mas é “protected” em java 1.3

http://java.sun.com/j2se/1.3/docs/api/java/util/Calendar.html#getTimeInMillis()

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#getTimeInMillis()

Então dá pra compilar com java 1.4 ou maior, mas não dá pra executar com 1.3 ou menor.

Assim, tem duas alternativas, ou você use java 1.4 para executar seu código, ou faça mundanças, utilizando código compatível com java 1.3

Por exemplo, o seguinte funciona:

        Timestamp competencia = new Timestamp( data.getTime().getTime() ); 

Para instânciar a (subclasse da) classe Calendar eu acho tanto faz… seu jeito, ou o jeito indicado pelo Ilmo. Maurício.

Abraços,
Sami

PS. Lembrando minha promessa e dando uma olhada ao grupo Sentenced… muito animados esses nomes das músicas: :mrgreen: Vou ver se encontre um CD deles no supermercado.

  1. When the moment of death arrives (6:04)
  2. Rot to dead (3:45)
  3. Disengagement (5:17)
  4. Rotting ways to misery (5:50)
  5. The truth (6:23)
  6. Suffocating beginning of life (6:07)
  7. Beyond the distant valleys (6:00)
  8. Under the suffer (5:19)
  9. Descending curtain of death (5:51

Sami,

Sua solução funciona como esperado. Realmente é problema de versão do JDK. A do Maurício também deve funcionar, embora eu não a tenha testado.
Acabei de achar uma outra abordagem que deve ser mais limpa, e também deve funcionar a contento:
Timestamp competencia = new Timestamp( System.currentTimeMillis() );
O fato de utilizarmos System elimina a necessidade de instanciar ou utilizar a classe Calendar, acredito eu.

grato a todos, e um abraço