2012-06-14 10 views
8

Una pregunta rápida sobre la excepción java.lang.VerifyError. Supongamos que aparece un error que se parece a esto:Interpretación del mensaje de excepción "argumento incompatible para funcionar"

Java call terminated by uncaught Java exception: java.lang.VerifyError:(class: com/.../MyClassName, method: <init> signature: (Ljava/io/Reader;)V) Incompatible argument to function 

¿Me podría ayudar con la comprensión de lo que el "init" y lo que el "(Ljava/io/lector;) V)" se refieren a partes? No se parecen a nombres de métodos o firmas, pero no estoy muy familiarizado con Java. ¡Gracias!

Respuesta

7

Este error significa que en algún lugar de su código, ha intentado llamar a un constructor (el método <init>) pasando el conjunto de argumentos incorrecto. El argumento esperado era un objeto Reader.

Esto probablemente significó que compiló previamente un archivo de clase, luego cambió la definición de clase de alguna manera sin recompilar el archivo de clase. En consecuencia, su código intenta llamar a una función que ya no existe. Intenta recompilar el código y ver si eso lo arregla.

Espero que esto ayude!

+0

Gracias! El problema es que el tipo de objeto que se inicializa tiene dos constructores, uno que toma una cadena y otro que toma un StreamReader como parámetro. No hay otra versión del tipo que le falta al constructor que toma una cadena. Esto es extraño Tengo que encontrar una manera de pasar este código. – Zoomzoom

+0

Finalmente descubrimos que las clases cargadas de Java estaban dañadas y tuvimos que forzar una recarga de todas las clases. – Zoomzoom

3

Si está ejecutando su aplicación en un servidor de aplicaciones, podría ser un problema de carga de clases.

Compiló su código en una biblioteca y cuando intenta ejecutar su código se ejecuta en una versión diferente (¿más antigua?) De la biblioteca.

La biblioteca más antigua probablemente no tiene ese método o constructor.

+0

Gracias. Estoy de acuerdo en que probablemente esté relacionado con un desajuste de versión. – Zoomzoom

0

Solo para dejar el rastro de una causa diferente.

Siempre en un servidor de aplicaciones (en mi caso, WildFly 10), puede estar cargando la misma biblioteca en un módulo y en la lib EAR. Si esta biblioteca contiene una interfaz que necesita ser implementada por el módulo, esto podría causar un conflicto ya que la misma clase/interfaz cargada por dos cargadores de clases diferentes se considera que son dos tipos diferentes.

Cuestiones relacionadas