Java 6: Exception [Ljava.lang.String

Atualizado em 03/06/2008: O site mudou para o endereço http://somaiscincominutos.com.br. Este post específico está aqui. É aconselhável visitar o novo site devido às possíveis atualizações.

Existe um problema ao tentar executar o seguinte código no Java 6 (não ocorre quando utiliza-se o Java 5) :

public class Test {
public static void main(String[] args) throws Exception {
String[] s = new String[] { “123″ };
String clName = s.getClass().getName();
Test.class.getClassLoader().loadClass(clName);
System.out.println(s);
}
}

O seguinte erro é descrito:

Exception in thread “main” java.lang.ClassNotFoundException: [Ljava.lang.String;
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at BugJava6.main(Test.java:14)

Isto ocorreu também, quando tentei iniciar uma aplicação no Tomcat. O erro acima podia ser observado nos logs do mesmo (apache-tomcat-dir/logs/catalina.out).

Para contornar este problema, deve-se:

  • Iniciar a JVM com o parâmetro: -Dsun.lang.ClassLoader.allowArraySyntax=true
  • Criar a variável de ambiente JAVA_OPTS=”-Dsun.lang.ClassLoader.allowArraySyntax=true”

Particularmente prefiro a segunda opção. Caso você tenha visto o artigo de como instalar o Java no Ubuntu 8.04, basta abrir o arquivo /etc/environment e inserir avariável JAVA_OPTS no final do arquivo.

Agradecimentos ao Antonio, que sofreu primeiramente com o problema, passando para mim a solução posteriormente. E neste link tem uma discussão sobre o problema.

É isso, valeu!

Atualizado em 13/05/2008: Caso essa técnica não funcione, por favor, leia este post.

Deixe um comentário