Problema

Hola, estoy haciendo un programa con JOptionPane, con clases y demas, y el main queda algo asi;

Digite su opcion:
1. programa1
2. programa2
3. programa3
4. Salir

cuando digito otro numero que no sea alguno de esos, aparece la opcion de que vuelva a digitar un numero entre el 1 al 4 .. pero mi problema es que cuando yo dígito una letra, se me cae el programa.

Desde ya gracias por su ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Jose Manuel

Eso es porque le debes de

Eso es porque le debes de estar pasando un entero para las diferentes opciones.
Has un case y el default sera el error. Ahora en ves de pasarle un entero pasale un char o string. Algo asi:

char opcion = capturaTeclado();
hacer {
    switch(opcion)  {
    case '1': programa1;
    break;
    case '2': programa2;
    break;
    case '3': programa3;
    break;
    case '4':salir;
    break;
    default: System.put.println("Introduce una opcion valida..");
    }
} mientras opcion sea diferente de '4';

Eso deberia de funcionar, sino es asi te invito a que postes tu codigo para ver que onda.
Saludos :)

Pues este es el Menu, se me

Pues este es el Menu, se me sigue cayendo cuando digito una letra en vez de un numero. ¿ Que deberia agregarle?

public static void main(String[] args)
{

String opcion1,opcion12,mensaje; // Variables declaradas
int opcion,opcion2;

do
{
mensaje = String.format("Digite su opcion\n\n1: Ordenar un vector \n2: Palindromo \n3: Juego 21 \n4: Salir del programa");
opcion1= JOptionPane.showInputDialog(null,mensaje,"PelozoK",JOptionPane.INFORMATION_MESSAGE); opcion=Integer.parseInt(opcion1);

if (opcion <= 0 || opcion >= 4)
{
do
{
JOptionPane.showMessageDialog(null, "Ingrese una opción válida (entre la 1 y la 4)");
mensaje = String.format("Digite su opcion\n\n1: Ordenar un vector \n:2 Palindromo\n3: Juego 21\n4: Salir del programa");
opcion1= JOptionPane.showInputDialog(null,mensaje,"PelozoK",JOptionPane.INFORMATION_MESSAGE); opcion=Integer.parseInt(opcion1);
}
while (opcion <= 0 || opcion >= 4);
}
else

{

switch (opcion)
{

case (1):// Ordenar vectores
vectores vec = new vectores();
vec.OrdenarVector();

break;

case (2): // Determinar si una palabra u oración se lee igual al derecho y al revés
Palindromo pal=new Palindromo();
pal.Palindromo();

break;

case (3): // Jugar Blacjack
Juego21 jugar = new Juego21();
jugar.juego();

break;
case (4):
System.exit(0);
}

}

opcion12= JOptionPane.showInputDialog(null, "Desea continuar con otro ejercicio? (1)-si (2)-no ");
opcion2=Integer.parseInt(opcion12);
}
while (opcion2==1);

JOptionPane.showMessageDialog(null, "Gracias por usar el programa");// Mensaje de Despedida

System.exit(0);
} // Fin public static void main
} // Fin public class Menu

que pasa si

¿sabes que pasa en la siguiente linea cuando le mandas como parametro una letra?

opcion=Integer.parseInt(opcion1);

pues la convierte un texto en

si digito una letra, se cae, la idea es que tome un numero para poder entrar en la opcion que desee el usuario, pero si digita una letra se cae el programa, mi problema es ese.

Conste que trato de darte la caña no el pescado

me refiero a que si conoces bien el funcionamiento del metodo, ya que creo que por ahi esta el detalle,

parseInt

public static int parseInt(String s)
                    throws NumberFormatException

    Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.

    Parameters:
        s - a String containing the int representation to be parsed
    Returns:
        the integer value represented by the argument in decimal.
    Throws:
        NumberFormatException - if the string does not contain a parsable integer.

ojo con la parte de Throws

Imagen de Jose Manuel

No hiciste lo que te dije, D:

No hiciste lo que te dije, D: intentalo, como usas JOption es de tipo string, entonces tu variable de control sera de tipo String.
Ahora, lo que te dice @pedrozalejandro es que comprendas que es lo que hace el metodo parseInt(String). Que no es otra cosar que convertir una cadena de texto a un valor decimal.
El error se produce en la conversion, porque pasas una letra y una letra no es un digito.
Lo que quieres hacer no es dificil, solo como que aun no entiendes lo de los tipos de datos o no te has percatado de eso. =)

Saludos.