Invocation Target Exception en Java

Amazon

Buenos días, estaba trasteando en Java y estaba intentando que desde una clase "Menu" me llamase a otra clase Mantenimiento, que se encarga de crear una ventana con botones. Todo bien hasta que cuando le doy al botón en "Menu" y me intenta llamar a "Mantenimiento", que me da la siguiente excepcion:

Invocation Target Exception

Y por si hace falta también adjunto las 2 clases.

Menu.java
Mantenimiento.java

Aunque supuse que se sobreentendería lo que necesito, me ayudaría que alguien me dijera cómo solucionar dicha excepción xd.

NeB1

Yo estoy verdísimo en java, ok? pero la intuición me dice que el método main solo debe estar en la clase que se ejecuta al iniciar la aplicación, y que en la clase mantenimiento deberías crear el constructor de la clase de la forma habitual que supongo que será en lugar de poner main, ponerle el nombre de la clase y luego usar esta clase de forma habitual en lugar de estática:

mantenimiento = new Mantenimiento();

en vez de

mantenimiento.main(null);

Pero ya te digo, que te lo diga alguien que sepa mas xD

1 respuesta
Amazon

#2 También me revienta xDD

Sigo buscando mientras espero que alguien me eche otra mano :_

Amazon

¿Nadie tiene idea? :(

pdj

XD El problema es con el Display casi seguro, normalmente solo se soporta uno y parece que estas intentando instanciar otro... Quita tanto el display como el shell y me dices

Amazon

Bueno el programa lo terminé y lo planteé de otra manera por el fallo este, pero de todos modos me acuerdo que cuando quitaba de Mantenimiento lo de

while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
         display.sleep();
      }
   }
display.dispose();
                

no me petaba, o algo así, tampoco me acuerdo ya, en 3 días piqué mucho código y dejé esto atrás xDd
Pero gracias igualmente <3

dagavi

Has puesto el display.dispose() dentro del bucle, debería estar a fuera (primero se hace Dispose del Shell y después del display).

Por otro lado, de display diría que solo tiene que haber uno en el sistema, los coges con "Display.getCurrent()" o "Display.getDefault()" (las dos retornan el display que se ha creado y una de las 2, no recuerdo cual, si no existe crea uno).

Yo también he tenido dudas acerca de como abrir una segunda ventana, pero creo que hay dos aproximaciones:

· Si quieres que al cerrar el programa principal se cierre todo, entonces no tienes que poner el bucle de espera en la segunda ventana (while (!disposed) if (read)...)

· Si quieres que el programa se pueda mantener con la segunda ventana, tienes que poner el bucle, pero no el display.dispose()

1 respuesta
Amazon

#7 Vale me acabas de ayudar un montón, me lo guardo en el pc <3

De todos modos, el display.dispose(); está fuera del bucle while xd

#9 ala, así mejor xD

dagavi

Edit: Vale, ahora veo que tiene una indentación "curiosa" y está fuera del bucle xD

1 respuesta

Usuarios habituales

  • dagavi
  • Amazon
  • pdj
  • NeB1