0 votos
por (20 puntos) en Java
¿Ayuda, me sale error al compilar con JBuilder?

Buenas noches, les escribo porque neecsito de su ayuda....sucede que cuando compilo, todo va bien., hasta que al final me sale un error..Espero me puedan ayudar, muchisimas gracias.

aqui les dejo una imagen de lo que me sale en la pantalla:

http://i674.photobucket.com/albums/vv101/rcairo23/error.jpg

aqui les dejo el codigo guardado en formato del JBuilder, lo guarde en mi skydrive para que puedan visualizarlo mas rapido, basta con descargarlo:

http://cid-0dc5ed01c7ef0c81.skydrive.live.com/self.aspx/ayudita%20please/Alumno.rar

aca lo tengo en un block de notas:

http://cid-0dc5ed01c7ef0c81.skydrive.live.com/self.aspx/ayudita%20please/ayuda%20please.txt

muchisimas gracias


1 Respuesta

0 votos
por (40 puntos)
Hola mm, aver he revisado tu codigo, primero que tienes que saber que la excepcion que te lanza java te esta indicando que se rebalso la pila interna que usa, eso se da generalmente cuando se hacen muchas llamadas a funciones, metodos o constructores.

Aver haciendo un rastreo de tu codigo te daras cuenta de porque pasa eso :

1.- EJecutas tu programa llamando al metodo main en el cual llamas al constructor de la clase Alumno.

2.- En el constructor de la clase Alumno llamas al constructor de la clase Frame

3.- En la clase Frame , en la seccion donde declaras los atributos, llamas al constructor de la clase Alumno

4.- En el constructor de la clase Alumno llamas al constructor de la clase Frame

5.-  En la clase Frame , en la seccion donde declaras los atributos, llamas al constructor de la clase Alumno

6.- ..........

7 .- .........   etc etc etc........

Date cuenta de que entraste a un bucle de llamada de constructores, ya que el constructor de Alumno llama al de Frame, y el constructor de Frame llama al de Alumno, y esto se ejecuta por siempre, lo cual produce un numero infinito de llamada de constructores, por lo cual ocurre un desbordamiento en la pila interna de java ( java.lang.StackOverflowError ).

Ademas debes saber que  va encontra del concepto de programacion orientada a objetos el hecho de crear la ventana dentro del constructor del alumno ya que la clase Frame es la que usa un objeto de la clase Alumno y no lo inverso, mira lo que deberias de hacer copiar esas instrucciones que estan dentro del constructor de la clase Alumno al constructor de la clase Frame y dejar vacio el constructor de la clase Alumno o si deseas eliminarlo.

Tambien debes de saber que es una mala costumbre de programacion instanciar los objetos en la seccion donde se declaran los atributos  ya que para eso esta el constructor, lo que te quiero decir es que debiste instanciar el objeto alumno a1 dentro del constructor del frame.

Sin darles mas vueltas al asunto te digo una posible manera de como quedaria el constructor de tu clase Frame:

 //Construct the frame

  public Frame1() {

a1 = new Alumno();

    enableEvents(AWTEvent.WINDOW_EVENT_MASK);

    try {

      jbInit();

    }

    catch(Exception e) {

      e.printStackTrace();

    }

    //Validate frames that have preset sizes

    //Pack frames that have useful preferred size info, e.g. from their layout

    if (packFrame) {

      pack();

    }

    else {

      validate();

    }

    //Center the window

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

    Dimension frameSize = getSize();

    if (frameSize.height > screenSize.height) {

      frameSize.height = screenSize.height;

    }

    if (frameSize.width > screenSize.width) {

      frameSize.width = screenSize.width;

    }

    setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);

    setVisible(true);

}

Y el constructor de tu clase Alumno tendria que estar vacio, por cierto el atributo boolean packFrame deberias de declararlo en tu clase Frame. Bueno ahora para poder ejecutar el programa, dentro del metodo main tendrias que crear un objeto de la clase Frame

                                                                                                                                                          David  -  FISI ( UNMSM )


Preguntas relacionadas

0 votos
0 respuestas
preguntado por juansess (20 puntos) Ene 28, 2016 en Java EE
0 votos
0 respuestas
0 votos
0 respuestas
preguntado por arkadigo (20 puntos) Jul 30, 2020 en Python
0 votos
2 respuestas
0 votos
0 respuestas
preguntado por Bruma (20 puntos) Ene 28, 2016 en Java
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...