Java - problema para cerrar scanner

 
Vista:

problema para cerrar scanner

Publicado por Nico (1 intervención) el 06/12/2020 16:38:03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package metodoBurbuja2;
import java.util.Scanner;
public class MetodoBurbuja2 {
	public static void main(String[] args) {
		Scanner ent = new Scanner(System.in);
 
// introducir las variables/rellenar tabla
 
        int i1=0,i2=0,aux = 0;
		int tabla[] = new int[7];
		for(i1=0;i1<tabla.length;i1++) {
			System.out.print("Teclee "+(i1+1)+"º número? ");
			tabla[i1]=ent.nextInt();
		}
 
// representar la tabla tal cual queda tras introducir los elementos
 
		System.out.println("\nTabla desordenada:");
		for(i1=0;i1<tabla.length;i1++)
			System.out.print(tabla[i1]+"\t");
 
// ordenar tabla (metodo burbuja)
 
		for(i1=0;i1<tabla.length - 1;i1++)
			for(i2=i1+1;i2<tabla.length;i2++)
					if(tabla[i1]>tabla[i2]) {
						aux = tabla[i1];
						tabla[i1] = tabla[i2];
						tabla[i2] = aux;
					}
 
// representar la tabla de forma ordenada tras aplicar el metodo de la burbuja
 
		System.out.println("\n\nTabla ordenada:");
		for(i1=0;i1<tabla.length;i1++)
			System.out.print(tabla[i1]+"\t");
 
		ent.close();
	}
 
}


Me aparece el siguiente mensaje: Resource leak: 'ent' is never closed
El programa funciona de todas formas pero no entiendo por que me aparece ese aviso
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

problema para cerrar scanner

Publicado por Kabuto (982 intervenciones) el 06/12/2020 23:42:23
Pues yo tampoco lo entiendo.
He copiado tu código y a mi también me sale el mismo warning. Pero no veo el motivo...
He probado a poner el ent.close() justo después del bucle que pide números, ya que luego no se va a necesitar más el objeto Scanner, pero tampoco sirve.

De todos modos, no es un problema grave. Es más bien una curiosidad, la verdad.

Al ser un programa sencillo, si el Scanner se cierra o no, es irrelevante... De hecho, se va a cerrar sí o sí en cuanto el programa termina, ya se encarga de eso la JVM.
Sería distinto si este fuera un programa más complejo, y esta parte del código solo fuera una parte de un programa principal que iba a seguir ejecutándose.


En cualquier caso, puedes decirle al compilador que no te lance un warning por esto añadiendo la etiqueta @SupressWarnings() de este modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MetodoBurbuja2 {
 
	@SuppressWarnings("resource")
	public static void main(String[] args) {
 
		Scanner ent = new Scanner(System.in);
 
		// introducir las variables/rellenar tabla
 
		int i1=0;
		int i2=0;
		int aux = 0;
 
		int tabla[] = new int[7];
 
		for (i1 = 0; i1 < tabla.length; i1++) {
			System.out.print("Teclee " + (i1+1) + "º número? ");
			tabla[i1] = ent.nextInt();
		}
		ent.close();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problema para cerrar scanner

Publicado por Tom (1708 intervenciones) el 07/12/2020 10:42:48
Quizás sea cuando lo ejecutáis desde algún IDE que tiene su propia "consola".
Scanner.close() cierra el stream con el que se creó. En este caso System.in, que no deberías cerrarlo, no hace falta y te podría dar sorpresas más adelante (no podrías volver a leer nada de System.in).

En resumen, no cierres el Scanner si lo has creado con un stream que has recibido (como System.in).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar