No corre mi programa!!!!!!!!!!!! que hago?

Edwin
31 de Julio del 2003
Este es mi programa :

import java.awt.*;
import java.util.*;
import java.lang.*;
import java.awt.event.*;
import javax.swing.*;


public class ProyectoProgra extends JFrame implements ActionListener //a laclase se agrega JFrame para que me despliegue una ventana
{
JTextArea objeto1; //se crea un objeto de tipo JTextArea, que es el area donde aparecera la leyenda
JTextField objeto2; //se crea un objero de tipo JTextField que mostrara los datos de mi menu.

public ProyectoProgra() //este es el constructor
{

String menu=" 1.Sumarn"+
" 2.Convertir de base 10 a base 2n"+
" 3.Convertir de base 2 a base 10n"; //la variable menu de tipo String me muestra la leyeda que aparecera en objeto1

Container c=getContentPane(); //se crea un contenedor que es quen"contendra" los dos objetos en el frame
c.setLayout(new FlowLayout());
objeto1 = new JTextArea(10,20); //en este campo le doy los valores en que aparecera objeto 1, es decir el frame
objeto2 = new JTextField(10); //al darle valor de 10
objeto2.addActionListener(this); //lo que hace this es decir que los valores de objeto 2 estan en esta clase ProyextoProgra
objeto1.setText("menu"); //le doy el nombre a objeto1, en el frame aparecera el nombre menu
c.add(objeto1); //agrego objeto1 al contenedor
c.add(objeto2); //agrego objeto2 al contenedor

}

public void actionPerformed(ActionEvent obj) //creo el metodo actionPerformed para inicializar los objetos
{
int n=Integer.parseInt(objeto2.getText()); //creo una variable de tipo int llamada n que a la vez dara
//los parametros para el switch que manejara los eventos de la clase
switch (n)
{
case 1:
Sumar(); //en el caso de que n=1, llama el metodo Sumar() ubicado en la parte inferior del codigo
break;

case 2:
Base10a2(); //en el caso de n=2, llama al metodo llamado Base10a2()
break;

case 3:
Base2a10(); //Para el caso n=3, inicia el metodo Base2a10()
break;



default: //en caso de digitar una opcion no especificada en el menu arroja error
JOptionPane.showMessageDialog(null,"Opcion Invalida, solo entre 1 y 3");
}
}

public void Sumar() //Metodo para Case 1:
{
int n1=Integer.parseInt(JOptionPane.showInputDialog("Numero 1")); //Solicita un primero numero que guardara en n1
int n2=Integer.parseInt(JOptionPane.showInputDialog("Numero 2")); //Solicita un nuevo numero que guardara en n2
JOptionPane.showMessageDialog(null,"La suma de los numeros que ha digitado es:"+(n1+n2)); //arroja el resultado de la suma entre n1 y n2
} //fin del metodo Sumar()

public String DecBin(int nume) //Inicio del metodo DecBin que creara en Case 2:
{
int divid = nume; //a la variable divid le asignara el valor nume, quien es el numero en base dec
int resid = 0; //este guardara los valores del residuo de la division
double coci = 0;
boolean cont = true; //se hace una variable booleana llamada cont
String nuevonum = ""; //guardara los valores que va arrojando la operacion en manera de String
String auxnum = "";

while (cont == true) //el while me indica hasta cuando debo continuar con el metodo, mientras cont siga con valor true
{
if (divid > 2) //si el numero que se digito es mayor que 2 entonces
{
resid = divid % 2; //al residuo se le asigna el mod de el numero digitado y 2
nuevonum+=resid; //el resultado es asignado a nuevonum
coci = divid / 2; //a coci se le asigna el valor de la division entre el numero digitado y 2
divid =(int)coci; //ahora el numero digitado cambia al asignarle el valor de coci
} //fin del if
else
{
cont = false; //si el numero ya no es mayor que dos cambia cont por false y se interrumpe el metodo
nuevonum+=divid; //nuevonum toma el valor del valor menor que dos
} //fin de else
}
auxnum = nuevonum; //ahora se le asigna a auxnum el valor de nuevonum
nuevonum=""; //nuevonum guardara el valor en un String
for (int i=auxnum.length()-1; i>=0; i--) //para una variable i que sea
nuevonum+=auxnum.charAt(i); //nuevonum se concatena para que pueda recibir datos de tipo char, este guarda uno a uno los datos del String
return nuevonum;
}


public void Base10a2()
{
int b1=Integer.parseInt(JOptionPane.showInputDialog("Escribir Numero en Base 10:"));
JOptionPane.showMessageDialog(null,"El Numero al pasarlo a Base 2 es:"+this.DecBin(b1));
}

public int Elevar(int Base, int Exp)
{
int result=1;
for (int i=0; i<Exp; i++)
result=result*Base;

return result;
}

public int BinDec(String numdec) //Se crea un metodo tipo int llamado BinDec que recibe datos de tipo String por medio de numdec
{
int Decimal=0;
int Base=0;
String numA="";

for (int Exp=numdec.length()-1; Exp>=0; Exp--)
{
numA+=numdec.charAt(Exp);
Base=Integer.parseInt(numA);
Decimal+=this.Elevar(Base,Exp);
}
return Decimal;
}

public void Base2a10()
{
String nume=JOptionPane.showInputDialog(null,"Digite el Numero Binario");
JOptionPane.showMessageDialog(null,"El Numero en Base 10 es:"+BinDec(nume));

}



}

***************************************************************************
Cree un programa para probar la clase anterior pero no he podido ejecutar el Frame, ya que nunca aparece nada:

public class TestProyectoProgra
{
public static void main(String args[])
{
ProyectoProgra Test = new ProyectoProgra();





}
}
***************************************************************************
Solo me hace falta ejecutar el test pero no se con que metodo llamar la clase desde el main.

Si tienen alguna sugerencia lo agradeceria muchisimo........Edwin

JLPmaniak
31 de Julio del 2003
Tu código esta muy bien, solo que tiene un detalle, al crear un objeto solamente lo que sucede es que se ejecutan las instrucciones que se encuentran en el constructor del objeto creado, en este caso: ProyectoProgra Test = new ProyectoProgra();
, pero hay un detalle, al igual que en la programación en Windows con C++ mediante la API, necesitas mostrar la ventana una vez creada, lo que tu código necesita es:
- agregarle el método siguiente al constructor de la clase ProyectoProgra:
setVisible(true);
Esto mostrará tu ventana y si quieres ocultarla solo por setVisible(false);
-o también puedes utilizarlo en el main una vez creado el objeto:
ProyectoProgra Test = new ProyectoProgra();
Test.setVisible(true);

Un consejo: puedes utilizar el método pack(); para reducir al máximo tamaño posible tus componentes en el Frame, esto en lugar de utilizar el tedioso setSize(int,int);