Foro sobre Java SE > Error al volver a empezar el programa
Si no pones el código completo, es imposible comprobarlo.
![Registered Commenter Registered Commenter](/universal/images/transparent.png)
import java.io.IOException;
import java.util.Scanner;
public class main {
static Scanner scanner = new Scanner(System.in);
static String param1 = "";
static String param2 = "";
static String param3 = "";
static String param4 = "";
static int correcte = 0;
static String dirActual;
static boolean arxCorrecte = false;
public static void main(String[] args) throws IOException {
demanarParametres();
System.out.println("################################");
esCorrecte();
switch (correcte) {
case 1:
System.out.println("funciona");
break;
case 2:
main(args);
break;
default:
System.out.println("No es una opción.");
esCorrecte();
break;
}
}
private static void esCorrecte() {
System.out.println("Es correcto? Y/N");
String ifCorrecte = scanner.next();
ifCorrecte = ifCorrecte.toUpperCase(); // convertir a mayusculas
correcte = 0;
if ("Y".equals(ifCorrecte)) {
correcte = 1;
} else {
if ("N".equals(ifCorrecte)) {
correcte = 2;
}
}
}
private static void demanarParametres() {
System.out.print("Escribe parametro 1:");
param1 = scanner.nextLine();
System.out.print("Escribe parametro 2:");
param2 = scanner.nextLine();
System.out.print("Escribe parametro 3:");
param3 = scanner.nextLine();
System.out.println("Escribe parametro 4:");
param4 = scanner.nextLine();
}
}
Este es el codigo simplificado, aunque también tengo el problema. En el anterior solo habia puesto lo que no funcionaba.
![Registered Commenter Registered Commenter](/universal/images/transparent.png)
En el caso "N" debes reinicializar el scanner, no reutilizar la instancia existente.
Aparte de eso, llamar a la clase "main" con el mismo nombre del método, y sin comenzar con una mayúscula, si bien no es un error en términos de compilación, si lo es en el hecho de que no respeta las convenciones de Java sobre clases.
Tampoco me parece una buena idea llamar al método main de manera recursiva como haces.
![Registered Commenter Registered Commenter](/universal/images/transparent.png)
Lo he solucionado pidiendo los parametros con JFileChooser i acceptando con JOptionPane. Lo de la clase main en minuscula ha sido un fallo, y sobre llamar a la clase main de manera reclusiva que alternativa me recomiendas?
![Registered Commenter Registered Commenter](/universal/images/transparent.png)
Lo mejor para un método main es usarlo únicamente para inicializar otras clases necesarias para que la aplicación "haga algo". Cuanto más breve, mejor.
La lógica de la aplicación debería desarrollarse en esas otras clases.
Es muy habitual, incluso en complejas aplicaciones gráficas, que el main solamente inicialice el frame principal de la aplicación.
En tu caso, crearía una o varias clases adicionales, en archivos separados, donde incluiría todas las decisiones lógicas sobre lo que quieres conseguir, y en la clase donde está main, solamente la inicialización de la clase que realmente es el origen de toda la aplicación, y de la que dependen todas las demás clases.
![Registered Commenter Registered Commenter](/universal/images/transparent.png)
public static void main(String[] args) throws IOException {
demanarParametres();
System.out.println("################################");
while (!arxCorrecte) {
comprovarArxius();
}
imprimirParametres();
esCorrecte();
switch (correcte) {
case 1:
cridarBat(param1, param2, param3);
break;
case 2:
main(args);
break;
default:
System.out.println("No es una opción.");
esCorrecte();
break;
}
}
private static void esCorrecte() {
System.out.println("Es correcto? Y/N");
String ifCorrecte = scanner.next();
ifCorrecte = ifCorrecte.toUpperCase(); //convertir a mayusculas
correcte = 0;
if ("Y".equals(ifCorrecte)) {
correcte = 1;
} else {
if ("N".equals(ifCorrecte)) {
correcte = 2;
}
}
}
private static void demanarParametres() {
System.out.print("Escribe parametro 1:");
param1 = scanner.nextLine();
System.out.print("Escribe parametro 2:");
param2 = scanner.nextLine();
System.out.print("Escribe parametro 3:");
param3 = scanner.nextLine() ;
System.out.println("Escribe parametro 4:");
param4 = scanner.nextLine();
validarParametres();
}
El problema es que si pongo “n” en esCorrecte() empieza todo el proceso otra vez, pero en el momento de ir pidiendo los escaners en demanarParametres() no me deja poner el primero, ya me salta automaticamente al segundo:
Escribe parametro 1: Escribe parametro 2: Y AQUI ME PIDE EL PARAM2