2010-11-08 24 views
54

Solo quiero crear un objeto de clase, pero obtuve este error al depurar. ¿Alguien puede decirme cuál es el problema? La ubicación de este código está en alguna clase de servicio de Spring (2.5).com.sun.jdi.InvocationException ocurrió al invocar el método

Hay un problema similar: OJB Reference Descriptor 1:0 relationship? Should I set auto-retrieve to false?

Muchas gracias ~

+3

Es un poco difícil adivinar cuál es tu problema sin ningún código fuente o rastro de pila. –

+8

Me di cuenta, el método toString() de la clase puede arrojar NullPointerException si invoke, cuando lo corrijo, el error desapareció, pero no sé cómo sucedió esto. – xyy

+3

Buen trabajo xyz. ¿Puede publicar una respuesta a la pregunta usted mismo y luego aceptar esa respuesta para que podamos cerrar esta pregunta? Además, debe aceptar respuestas a preguntas anteriores si resuelven su problema. – Zecas

Respuesta

74

La raíz del problema es que cuando la depuración de la interfaz Java depuración llamará al método toString() de la clase para mostrar la información de clase en el cuadro emergente, por lo que si el método toString no se define correctamente, esto puede suceder.

+0

gracias, funcionó –

27

También tuve una excepción similar al depurar en Eclipse. Cuando pasé por encima de un objeto, el cuadro emergente mostró un mensaje com.sun.jdi.InvocationException. La causa principal para mí no fue el método toString() de mi clase, sino el método hashCode(). Causaba un NullPointerException, lo que provocó que com.sun.jdi.InvocationException apareciera durante la depuración. Una vez que me hice cargo del puntero nulo, todo funcionó como se esperaba.

2

así que tuve el mismo problema aquí. Descubrí que mi instancia de dominio se estaba desconectando de la sesión de hibernación. Utilicé isAttached() para verificar y adjunté el dominio usando d.attach()

1

Desactivando el botón/icono de Mostrar estructura lógica 'de la esquina superior derecha de la ventana de variables en el depurador de eclipse lo resolvió, en mi caso.

4

Para mí la misma excepción se produce cuando el toString se definió como tal:

@Override 
public String toString() { 
    return "ListElem [next=" + next + ", data=" + data + "]"; 
} 

Dónde ListElem es un elemento de lista enlazada y he creado un ListElem como tal:

private ListElem<Integer> cyclicLinkedList = new ListElem<>(3); 
ListElem<Integer> cyclicObj = new ListElem<>(4); 
... 

cyclicLinkedList.setNext(new ListElem<Integer>(2)).setNext(cyclicObj) 
    .setNext(new ListElem<Integer>(6)).setNext(new ListElem<Integer>(2)).setNext(cyclicObj); 

Esto efectivamente provocó una lista cíclica vinculada que no se puede imprimir. Gracias por el puntero.

10

Bueno, podría deberse a varias cosas como las mencionadas anteriormente. En mi caso, el problema era el mismo, pero la razón era otra cosa.

En una clase (A), tenía varios objetos y uno de objetos era otra clase (B) con algunos otros objetos. Durante el proceso, uno de los objetos (Cadena) de la clase B obtuvo nulo, y luego traté de acceder a ese objeto a través de la clase principal (A).

Por lo tanto, la consola arrojará excepción de punto nulo pero el depurador de eclipse mostrará el error mencionado anteriormente.

Espero que pueda hacer lo restante.

+0

esto fue útil +1 – mattymanme

1

Podría haber dos razones un elemento no existe:

  1. Malo XPath (// * [@ id'forgotQuote])
  2. XPath correcta, pero ningún elemento (// * [contiene (text(), 'Este texto no está en la página')])

¿Puede obtener com.sun.jdi.InvocationException en cualquier caso cuando está ejecutando Debug y coloca el mouse sobre una referencia al WeBElement (esto con Selenium y Java) ???

se utiliza la siguiente, pero no se puede distinguir si devuelve falso debido al mal XPath o elemento inexistente (sintaxis XPath válida):

public static boolean isElementDisplayed(WebElement element) { 
    boolean isDisplayed = false; 

    try { 
     isDisplayed = element.isDisplayed(); 
    } catch (NoSuchElementException e) { 
     ;// No Worries 
    } 
    return isDisplayed; 
} 
0

Extracción hashCode() y equals() resuelto mi problema. En mi caso, utilicé el código hash common-lang de Apache e igualé los constructores para crear clases no estáticas manualmente, por lo que el compilador no arrojó ninguna excepción. Pero en el tiempo de ejecución provocó la excepción de invocación.

2

Tuve el mismo problema una vez. En mi caso, el método toString() fue mal creado. Para ser precisos, se incluyó una variable estática final en el método toString cuando a un desarrollador de mi equipo se le asignó una tarea de limpieza de código y se agregaron los métodos toString(), hashCode() y equals() a objetos de dominio siempre que fue posible. pero en las clases, debido a que al mirarlo, incluía la variable estática final que causaba la "com.sun.jdi.InvocationException", esta excepción era visible al depurar solo cuando estaba sobre el objeto que tiene la excepción.

0

En mi caso fue debido a que la referencia del objeto se agotó. Estaba automatizando mi aplicación utilizando Selenium WebDriver, así que escribo algo en un cuadro de texto y luego navega a otra página, así que mientras vuelvo a la página anterior, ese objeto se queda obsoleto. Así que esta era la causa de la excepción, por lo manejé nuevo inicialización de los elementos - PageFactory.initElements (conductor, Test.class;

1

Este fue mi caso

tuve un BO clase de Estudiante que estaba teniendo muchos-a-uno mapeo a otra clase BOclases (la clase que estudió).

Quería guardar los datos en otra tabla, que tenía claves externas de Estudiante y Clases. En algún ejemplo de ejecución, iba a traer a una lista deestudiantes bajo algunas condiciones, y cada estudiante a tener una referencia de Clases clase.

Código de ejemplo: -

Iterator<Student> itr = studentId.iterator(); 
while (itr.hasNext()) 
{ 
    Student student = (Student) itr.next(); 
    MarksCardSiNoGen bo = new MarksCardSiNoGen(); 

    bo.setStudentId(student); 

    Classes classBo = student.getClasses(); 

    bo.setClassId(classBo); 
} 

Aquí se puede ver que, Soy la creación de ambos Estudiante y Clases referencia a la BO quiero salvar. Pero mientras estaba depurando cuando inspeccioné student.getClasses() estaba mostrando esta excepción (com.sun.jdi.InvocationException).

El problema que encontramos fue que, después de ir a buscar la lista Estudiante usando HQL consulta, yo era lavado y cierre de sesión de la.Cuando eliminé esa declaración session.close();, se solucionó el problema.

La sesión se cerró cuando finalmente guardé todos los datos en la tabla (MarksCardSiNoGen).

Espero que esto ayude.

0

Obtuve una excepción similar en Eclipse. Esto fue debido al error java.lang.StackOverflowError. He reemplazado el método toString() en la clase infantil, que tiene JoinColumn, que devolvió una cadena utilizando el objeto de la clase padre, lo que dio como resultado una dependencia circular. Intenta eliminar ese objeto del toString(), y funcionará.

Cuestiones relacionadas