Java 6: Exception [Ljava.lang.String
sábado, maio 10, 2008 – 1:01 amExiste 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.