Foros del Web » Programación para mayores de 30 ;) » Java »

StackOverflowErro

Estas en el tema de StackOverflowErro en el foro de Java en Foros del Web. bueno habia hecho un applet del juego 3 en raya, un ejercicio de un libro. en applet funciona muy bien. el tema es que ahora ...
  #1 (permalink)  
Antiguo 21/07/2012, 16:48
 
Fecha de Ingreso: junio-2012
Mensajes: 17
Antigüedad: 11 años, 10 meses
Puntos: 2
StackOverflowErro

bueno habia hecho un applet del juego 3 en raya, un ejercicio de un libro.

en applet funciona muy bien. el tema es que ahora quise pasarlo a JFrame para probar las características de este y ademas introduciendo los conceptos de varias clases (creo que a esto se le llama herencia), soy muy nuevo en esta parte de java.

el juego nuevo tiene clases por separado

-clase "Ejecutable" (el que ejecuta el "programa")
-clase "MainVentana" (acá puse la posición de los botones y la forma de la "ventana"
-clase "Botones" (acá se inicializa los botones de la "ventana" y el menú de pantalla)
-clase "evento" (bueno acá se le da acción a los botones del "programa")
-clase "juego3x3" y "juego 4x4" acá esta todo el funcionamiento del juego)

Bueno esto sale como error:

Cita:
Exception in thread "main" java.lang.StackOverflowError;
y me marca como veinte o 30 veces estas misma linea:
Cita:
at com.wawanime.JFrame3.tateti.EventosMenu.<init>(Eve ntosMenu.java:10)
at com.wawanime.JFrame3.tateti.BotonesJuego.<init>(Bo tonesJuego.java:9)
he leido por ahi que el problema este es "a bad recursive call." algo asi como una llamada "recursiva" y dice que cuando no las defino con la terminacion correcta se llaman una y otra vez por siempre.

les dejo el codigo a ver si me dan una idea por donde va el problema, a mi me parece que es algo conceptual el error. le di mil vueltas y nada.

clase "ejecutable"
Código java:
Ver original
  1. public class Ejecutable {
  2.     public static void main(String [] args){
  3.         MainVentana a=new MainVentana();
  4.         a.setDefaultCloseOperation(a.EXIT_ON_CLOSE);
  5.         a.setVisible(true);
  6.         a.setBounds(400, 300, 350, 290);
  7.     }
  8. }

clase "MainVentana"
Código java:
Ver original
  1. public class MainVentana extends JFrame{
  2.    
  3.     JTextField Estado=new JTextField();
  4.     JTextField Estado2=new JTextField();
  5.     BotonesJuego boton=new BotonesJuego();
  6.    
  7.     MainVentana(){
  8.        
  9.         //definir atributo del frame--------
  10.         setTitle("TATETI - Tres En Raya");
  11.         setLayout(null);
  12.         setResizable(false);
  13.         setBackground(Color.black);
  14.    
  15.         //Estado del juego ---jugador1----jugador2----
  16.         Estado.setEditable(false);
  17.         Estado.setBounds(10, 190, 170, 20);
  18.         Estado.setVisible(true);
  19.         add(Estado);
  20.         //juego seleccionado---3x3----4x4-----
  21.         Estado2.setEditable(false);
  22.         Estado2.setBounds(10, 220, 170, 20);
  23.         Estado2.setVisible(true);
  24.         add(Estado2);
  25.         //llamando a los metodos de botones
  26.         BJuego3x3();
  27.         BJuego4x4();
  28.         menupantalla();
  29.     }  
  30.  
  31. //agrega los botnes y les da su posicion inicial-------------------------------
  32.     public void BJuego3x3(){
  33.        
  34.         boton.BJuego3x3();
  35.         for (int i=0;i<boton.tateti3.length;i++){
  36.             for (int j=0;j<boton.tateti3[i].length;j++){
  37.                 add(boton.tateti3[i][j]);
  38.             }
  39.         }
  40.         boton.tateti3[0][0].setBounds(10, 10, 50, 50);
  41.         boton.tateti3[0][1].setBounds(70, 10, 50, 50);
  42.         boton.tateti3[0][2].setBounds(130, 10, 50, 50);
  43.         boton.tateti3[1][0].setBounds(10, 70, 50, 50);
  44.         boton.tateti3[1][1].setBounds(70, 70, 50, 50);
  45.         boton.tateti3[1][2].setBounds(130, 70, 50, 50);
  46.         boton.tateti3[2][0].setBounds(10, 130, 50, 50);
  47.         boton.tateti3[2][1].setBounds(70, 130, 50, 50);
  48.         boton.tateti3[2][2].setBounds(130, 130, 50, 50);
  49.        
  50.     }//fin de metodo BJuego3x3
  51.  
  52.     public void BJuego4x4(){
  53.         boton.BJuego4x4();
  54.         boton.tateti4[0][0].setBounds(10, 10, 30, 30);
  55.         boton.tateti4[0][1].setBounds(60, 10, 30, 30);
  56.         boton.tateti4[0][2].setBounds(110, 10, 30, 30);
  57.         boton.tateti4[0][3].setBounds(160, 10, 30, 30);
  58.         boton.tateti4[1][0].setBounds(10, 60, 30, 30);
  59.         boton.tateti4[1][1].setBounds(60, 60, 30, 30);
  60.         boton.tateti4[1][2].setBounds(110, 60, 30, 30);
  61.         boton.tateti4[1][3].setBounds(160, 60, 30, 30);
  62.         boton.tateti4[2][0].setBounds(10, 110, 30, 30);
  63.         boton.tateti4[2][1].setBounds(60, 110, 30, 30);
  64.         boton.tateti4[2][2].setBounds(110, 110, 30, 30);
  65.         boton.tateti4[2][3].setBounds(160, 110, 30, 30);
  66.         boton.tateti4[3][0].setBounds(10, 160, 30, 30);
  67.         boton.tateti4[3][1].setBounds(60, 160, 30, 30);
  68.         boton.tateti4[3][2].setBounds(110, 160, 30, 30);
  69.         boton.tateti4[3][3].setBounds(160, 160, 30, 30);
  70.        
  71.         for (int i=0;i<boton.tateti4.length;i++){
  72.             for (int j=0;j<boton.tateti4[i].length;j++){
  73.                 add(boton.tateti4[i][j]);
  74.             }
  75.         }//fin de for
  76.     }//fin de metodo
  77.    
  78.     public void menupantalla(){
  79.         int y=10;
  80.         for (int i=0;i<boton.opciones.length;){
  81.         boton.opciones[i].setBounds(200, y, 120, 30);
  82.         y+=40;
  83.         add(boton.opciones[i]);
  84.         }
  85. }
  86. }//fin de metodo


clase "BotonesJuego"
Código java:
Ver original
  1. public class BotonesJuego extends JButton{
  2.    
  3.     JButton tateti3[][]=new JButton[3][3];
  4.     JButton tateti4[][]=new JButton[4][4];
  5.     EventosMenu evt=new EventosMenu();
  6.     JButton opciones[]=new JButton[6];
  7.     String opt[]={"Un Jugador","Dos Jugadores","Tres X Tres","Cuatro X Cuatro","Nuevo Juego","Salir"};
  8.     //atributos de botones para "tres en raya" en matriz de 3x3
  9.     public void BJuego3x3(){
  10.    
  11.         for (int i=0;i<tateti3.length;i++){
  12.             for (int j=0;j<tateti3[i].length;j++){
  13.                 tateti3[i][j]=new JButton(" * ");
  14.                 tateti3[i][j].setVisible(false);
  15.                 tateti3[i][j].addActionListener(evt);
  16.                 }
  17.         }
  18.  
  19.     }
  20.     //atributos de botones para "tres en raya" en matriz de 4x4
  21.     public void BJuego4x4(){
  22.     for (int i=0;i<tateti4.length;i++){
  23.          for (int j=0;j<tateti4[i].length;j++){
  24.             tateti4[i][j]=new JButton(" * ");
  25.             tateti4[i][j].setVisible(false);
  26.             tateti4[i][j].addActionListener(evt);
  27.          }
  28.      }
  29.  
  30.     }
  31.     //atributos de menu del programa
  32.     public void menu(){
  33.         for (int i=0;i<opciones.length;i++){
  34.             opciones[i]=new JButton(opt[i]);
  35.             opciones[i].setVisible(true);
  36.             opciones[i].addActionListener(evt);
  37.         }
  38.     }
  39.     }

clase "eventos"
Código java:
Ver original
  1. public class EventosMenu implements ActionListener{
  2.  
  3.     BotonesJuego boton=new BotonesJuego();
  4. //Accion Boton juego 3x3------------------------------------------------------
  5.     public void actionPerformed(ActionEvent e) {
  6.        
  7.         if(boton.opciones[2]==e.getSource()){
  8.             //Borrar botones 4x4-------------------
  9.             for (int i=0;i<boton.tateti4.length;i++){
  10.                  for (int j=0;j<boton.tateti4[i].length;j++){
  11.                     boton.tateti4[i][j].setVisible(false);
  12.                  }
  13.              }
  14.             //iniciar botones 3x3-------------------
  15.             for (int i=0;i<boton.tateti3.length;i++){
  16.                 for (int j=0;j<boton.tateti3[i].length;j++){
  17.                     boton.tateti3[i][j].setVisible(true);
  18.                     }
  19.             }
  20.         }
  21. //Accion Boton juego 4x4------------------------------------------------------
  22.        
  23.         if (boton.opciones[3]==e.getSource()){
  24.             //Borrar botones juego 3x3------------------
  25.             for (int i=0;i<boton.tateti3.length;i++){
  26.                 for (int j=0;j<boton.tateti3[i].length;j++){
  27.                     boton.tateti3[i][j].setVisible(false);
  28.                     }
  29.             }
  30.             //iniciar botones juego 4x4------------------
  31.             for (int i=0;i<boton.tateti4.length;i++){
  32.                  for (int j=0;j<boton.tateti4[i].length;j++){
  33.                     boton.tateti4[i][j].setVisible(true);
  34.                  }
  35.              }
  36.         }
  37.    
  38.    
  39.     }//fin de Action Event
  40.  
  41. }//Fin de Clase Eventos Menu
  #2 (permalink)  
Antiguo 22/07/2012, 01:26
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: StackOverflowErro

Hola:

BotonesJuego tiene un atributo EventosMenu con un new EventosMenu(). EventosMenu, por su parte, en el constructor, hace un new de BotonesJuego

Así que la secuencia es BotonesJuego hace new de EventosMenu, este hace otro new de BotonesJuego que a su vez hace otro new de EventosMenu que a su vez... y así hasta que se te acaba la memoria y da un StackOverflow.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 22/07/2012, 03:02
 
Fecha de Ingreso: junio-2012
Mensajes: 17
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: StackOverflowErro

Si estaba viendo eso, no había leído de la recursividad hasta ahora. pasa que si quiero separar los elementos visuales de las acciones de cada botón, me veo obligado a hacer eso.

tengo dos opciones:

o pongo en la misma clase los elementos visuales del frame y los eventos de cada uno.

o le pongo un limite de recursividad por ejemplo que esta de por si es un lio por que me tendria que poner a contar cuantas veces interactuan el primero con el segundo

hay otra forma?

dejo el codigo cambiado hasta ahora.

Aca escribiendo esto se me ocurrio que si puedo poner asignarle a los botones el "addActionListener" desde la clase eventos, podria separar botones de eventos no?
voy a ver si me sale


ejecutable que ya ni me acuerdo para que lo queria poner en una clase a parte:
Código Java:
Ver original
  1. public class Ejecutable extends MainVentana{
  2.    
  3.     public static void main(String [] args){
  4.         MainVentana a=new MainVentana();
  5.     }
  6. }

MainVentana - Saque todos los botones y solo deje los atributos del jframe y la posicion de los botones
Código Java:
Ver original
  1. public class MainVentana extends BotonesJuego{
  2.    
  3.     JFrame hola=new JFrame();
  4.     BotonesJuego boton=new BotonesJuego();
  5.  
  6.     public MainVentana(){
  7.        
  8.         //definir atributo del frame--------
  9.         hola.setTitle("TATETI - Tres En Raya");
  10.         hola.setLayout(null);
  11.         hola.setResizable(false);
  12.         hola.setBackground(Color.black);
  13.         hola.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14.         hola.setVisible(true);
  15.         hola.setBounds(400, 300, 350, 290);
  16.        
  17.         boton.BJuego3x3();
  18.         boton.BJuego4x4();
  19.         boton.menu();
  20.         menupantalla();
  21.         BJuego3x3();
  22.         BJuego4x4();
  23.        
  24.        
  25.     }  
  26.  
  27. //agrega los botnes y les da su posicion inicial-------------------------------
  28.     public void BJuego3x3(){
  29.        
  30.         boton.BJuego3x3();
  31.         for (int i=0;i<boton.tateti3.length;i++){
  32.             for (int j=0;j<boton.tateti3[i].length;j++){
  33.                 hola.add(boton.tateti3[i][j]);
  34.             }
  35.         }
  36.         boton.tateti3[0][0].setBounds(10, 10, 50, 50);
  37.         boton.tateti3[0][1].setBounds(70, 10, 50, 50);
  38.         boton.tateti3[0][2].setBounds(130, 10, 50, 50);
  39.         boton.tateti3[1][0].setBounds(10, 70, 50, 50);
  40.         boton.tateti3[1][1].setBounds(70, 70, 50, 50);
  41.         boton.tateti3[1][2].setBounds(130, 70, 50, 50);
  42.         boton.tateti3[2][0].setBounds(10, 130, 50, 50);
  43.         boton.tateti3[2][1].setBounds(70, 130, 50, 50);
  44.         boton.tateti3[2][2].setBounds(130, 130, 50, 50);
  45.        
  46.     }//fin de metodo BJuego3x3
  47.  
  48.     public void BJuego4x4(){
  49.         boton.BJuego4x4();
  50.         boton.tateti4[0][0].setBounds(10, 10, 30, 30);
  51.         boton.tateti4[0][1].setBounds(60, 10, 30, 30);
  52.         boton.tateti4[0][2].setBounds(110, 10, 30, 30);
  53.         boton.tateti4[0][3].setBounds(160, 10, 30, 30);
  54.         boton.tateti4[1][0].setBounds(10, 60, 30, 30);
  55.         boton.tateti4[1][1].setBounds(60, 60, 30, 30);
  56.         boton.tateti4[1][2].setBounds(110, 60, 30, 30);
  57.         boton.tateti4[1][3].setBounds(160, 60, 30, 30);
  58.         boton.tateti4[2][0].setBounds(10, 110, 30, 30);
  59.         boton.tateti4[2][1].setBounds(60, 110, 30, 30);
  60.         boton.tateti4[2][2].setBounds(110, 110, 30, 30);
  61.         boton.tateti4[2][3].setBounds(160, 110, 30, 30);
  62.         boton.tateti4[3][0].setBounds(10, 160, 30, 30);
  63.         boton.tateti4[3][1].setBounds(60, 160, 30, 30);
  64.         boton.tateti4[3][2].setBounds(110, 160, 30, 30);
  65.         boton.tateti4[3][3].setBounds(160, 160, 30, 30);
  66.    
  67.         for (int i=0;i<boton.tateti4.length;i++){
  68.             for (int j=0;j<boton.tateti4[i].length;j++){
  69.                 hola.add(boton.tateti4[i][j]);
  70.             }
  71.         }//fin de for
  72.     }//fin de metodo
  73.    
  74.     public void menupantalla(){
  75.         boton.menu();
  76.         boton.opciones[0].setBounds(200, 10, 120, 30);
  77.         boton.opciones[1].setBounds(200, 50, 120, 30);
  78.         boton.opciones[2].setBounds(200, 90, 120, 30);
  79.         boton.opciones[3].setBounds(200, 130, 120, 30);
  80.         boton.opciones[4].setBounds(200, 170, 120, 30);
  81.         boton.opciones[5].setBounds(200, 210, 120, 30);
  82.         Estado2.setBounds(10, 220, 170, 20);
  83.         Estado.setBounds(10, 190, 170, 20);
  84.         hola.add(Estado2);
  85.         hola.add(Estado);
  86.        
  87.         hola.add(boton.opciones[0]);
  88.         hola.add(boton.opciones[1]);
  89.         hola.add(boton.opciones[2]);
  90.         hola.add(boton.opciones[3]);
  91.         hola.add(boton.opciones[4]);
  92.         hola.add(boton.opciones[5]);
  93. }
  94. }

y los botones y el ActionListener, despues tengo otras 2 clases mas que es la parte ""logica""
Código Java:
Ver original
  1. public class BotonesJuego implements ActionListener{
  2.    
  3.  
  4.     JButton tateti3[][]=new JButton[3][3];
  5.     JButton tateti4[][]=new JButton[4][4];
  6.     JButton opciones[]=new JButton[6];
  7.     JTextField Estado=new JTextField();
  8.     JTextField Estado2=new JTextField();
  9.     String opt[]={"Un Jugador","Dos Jugadores","Tres X Tres","Cuatro X Cuatro","Nuevo Juego","Salir"};
  10.     Juego3x3 tres=new Juego3x3();
  11.     int a,b;
  12.     boolean unJug=false,movmaq=false;
  13.    
  14. //------------------atributos de botones---------------------------------------
  15.     public void BJuego3x3(){
  16.    
  17.         for (int i=0;i<tateti3.length;i++){
  18.             for (int j=0;j<tateti3[i].length;j++){
  19.                 tateti3[i][j]=new JButton(" * ");
  20.                 tateti3[i][j].setVisible(false);
  21.                 tateti3[i][j].addActionListener(this);
  22.                 }
  23.         }
  24.  
  25.     }
  26.  
  27.     public void BJuego4x4(){
  28.     for (int i=0;i<tateti4.length;i++){
  29.          for (int j=0;j<tateti4[i].length;j++){
  30.             tateti4[i][j]=new JButton(" * ");
  31.             tateti4[i][j].setVisible(false);
  32.             tateti4[i][j].addActionListener(this);
  33.          }
  34.      }
  35.  
  36.     }
  37.    
  38.     public void menu(){
  39.         for (int i=0;i<opciones.length;i++){
  40.             opciones[i]=new JButton(opt[i]);
  41.             opciones[i].setVisible(true);
  42.             opciones[i].addActionListener(this);
  43.         }
  44.         Estado.setEditable(false);
  45.         Estado.setVisible(true);
  46.         Estado2.setEditable(false);
  47.         Estado2.setVisible(true);
  48.     }
  49.  
  50.  
  51. //----------------- acciones de botones OPCIONES-------------------------------
  52.     public void unJugador(){
  53.         opciones[0].setEnabled(false);
  54.         opciones[1].setEnabled(false);
  55.         unJug=true;
  56.     }
  57.  
  58.     public void DosJugadores(){
  59.         opciones[0].setEnabled(false);
  60.         opciones[1].setEnabled(false);
  61.         unJug=false;
  62.     }
  63.  
  64.     public void tabla3x3(){
  65.         for (int i=0;i<tateti3.length;i++){
  66.             for (int j=0;j<tateti3[i].length;j++){
  67.                 tateti3[i][j].setVisible(true);
  68.         }}
  69.        
  70.         opciones[2].setEnabled(false);
  71.         opciones[3].setEnabled(false);
  72.         tres.inicializarTablero();
  73.     }
  74.        
  75.     public void tabla4x4(){
  76.         for (int i=0;i<tateti4.length;i++){
  77.              for (int j=0;j<tateti4[i].length;j++){
  78.                 tateti4[i][j].setVisible(true);
  79.              }
  80.          }
  81.         opciones[2].setEnabled(false);
  82.         opciones[3].setEnabled(false);
  83.     }
  84. //-------------------accion de botones 3x3---------------------------------------
  85.     public void mensajetxt3(){
  86.     if(tres.enJuego){  
  87.         if(tres.turno1){
  88.             Estado.setText(tres.tImpreso);
  89.             Estado.setForeground(Color.red);
  90.         }else{
  91.             Estado.setText(tres.tImpreso);
  92.             Estado.setForeground(Color.blue);
  93.         }
  94.     }else{
  95.             Estado.setText("Felicidades jugador " +tres.Ganador);
  96.             for (int i=0;i<tateti3.length;i++){
  97.                 for(int j=0;j<tateti3[i].length;j++){
  98.                     if (tres.tablero[i][j]==0){
  99.                         tateti3[i][j].setEnabled(false);
  100.                     }
  101.                 }
  102.             }
  103.     }
  104.     }
  105.    
  106.    
  107.     //-------------------ActionEvent----------------------------------------------
  108.    
  109.    
  110.     public void actionPerformed(ActionEvent e) {
  111.             if(opciones[0]==e.getSource()){unJugador();}
  112.             if(opciones[1]==e.getSource()){DosJugadores();}
  113.             if(opciones[2]==e.getSource()){tabla3x3();}
  114.             if(opciones[3]==e.getSource()){tabla4x4();}
  115.             if(opciones[4]==e.getSource()){unJugador();}
  116.             if(opciones[5]==e.getSource()){System.exit(0);}
  117.        
  118.     //------------------------accion botones juego 3x3----------------------------
  119.         if(unJug){ 
  120.             for (int i=0;i<tateti3.length;i++){
  121.                 for (int j=0;j<tateti3[i].length;j++){
  122.                     if(tateti3[i][j]==e.getSource()){
  123.                         if(tres.turno1){
  124.                             tres.tablero[i][j]=1;
  125.                             tateti3[i][j].setEnabled(false);
  126.                             tateti3[i][j].setBackground(Color.red);
  127.                             tres.cambiarJugador();
  128.                             tres.juegoTerminado();
  129.                             mensajetxt3();
  130.                            
  131.                         }else{
  132.                             tres.tablero[i][j]=2;
  133.                             tateti3[i][j].setEnabled(false);
  134.                             tateti3[i][j].setBackground(Color.blue);
  135.                             tres.cambiarJugador();
  136.                             tres.juegoTerminado();
  137.                             mensajetxt3();
  138.                         }
  139.                     }
  140.                 }
  141.             }
  142.         }else{
  143.             if (tres.turno1){
  144.                 for (int i=0;i<tateti3.length;i++){
  145.                     for (int j=0;j<tateti3[i].length;j++){
  146.                         if(tateti3[i][j]==e.getSource()){
  147.                             tres.tablero[i][j]=1;
  148.                             tateti3[i][j].setEnabled(false);
  149.                             tateti3[i][j].setBackground(Color.red);
  150.                             tres.cambiarJugador();
  151.                             tres.juegoTerminado();
  152.                             mensajetxt3();
  153.                         }
  154.                     }
  155.                 }
  156.             }else{
  157.                 movmaq=true;
  158.                 do{
  159.                     a=(1+(int)(Math.random()*3))-1;
  160.                     b=(1+(int)(Math.random()*3))-1;
  161.                     if(tres.tablero[a][b]==0){
  162.                         tres.tablero[a][b]=2;
  163.                         tateti3[a][b].setEnabled(false);
  164.                         tateti3[a][b].setBackground(Color.blue);
  165.                         tres.cambiarJugador();
  166.                         tres.juegoTerminado();
  167.                         mensajetxt3();
  168.                         movmaq=false;
  169.                     }
  170.                 }while(movmaq);
  171.             }
  172.            
  173.         }
  174.     //----------------------------------------------------------------------------
  175.     }
  176. }
  #4 (permalink)  
Antiguo 23/07/2012, 15:11
 
Fecha de Ingreso: junio-2012
Mensajes: 17
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: StackOverflowErro

Ya arregle el problema, termine el programa. lo resolvi replanteando la funcion de cada clase, me mande sin pensarlo e hice un lio.

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

BotonesJuego tiene un atributo EventosMenu con un new EventosMenu(). EventosMenu, por su parte, en el constructor, hace un new de BotonesJuego

Así que la secuencia es BotonesJuego hace new de EventosMenu, este hace otro new de BotonesJuego que a su vez hace otro new de EventosMenu que a su vez... y así hasta que se te acaba la memoria y da un StackOverflow.

Se bueno.
Bueno Entonces Cuando en una clase "heredas" o "creas una instancia" de otra que pagina que "Hereda" o "instancia" de la primera se produce un StackOverflow en ningun caso es diferente?(solo limitando las veces que una clase llama a la otra no?)

si esta mal la definicion me avisan, quiero matar mi lenguaje no-programador XD

offtopic: chuidiang estoy leyendo tus tutoriales, muy buena pagina, justo ahora que estoy comenzando a ver swing y tratando de entender la diferencia entre JDialog y JFrame. me sirvio muchisimo tu explicacion, muchas gracias.

Etiquetas: clase, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:22.