2013-03-25 20 views
19

Bir oyun üzerinde çalışıyorum ve tarayıcımda küçük bir sorunla karşılaştım. Bir kaynak sızıntısı tarayıcım asla kapanmıyor.Tarayıcı kapalı değildir

Ancak tarayıcımın kapatmadan önce çalıştığını düşündüm. Ama şimdi değil. Burada bana kimse yardım edebilir mi? Eğer genellikle finally bloğunda tarayıcınızı kapatıp gereken kaynak kapatmayın zaman sana java 7 kullanarak varsayarak yaşıyorum

import java.util.Scanner; 

public class Main { 

    public static final boolean CHEAT = true; 

    public static void main(String[] args) { 

     Scanner scanner = new Scanner(System.in); 
     int amountOfPlayers; 
     do { 
      System.out.print("Select the amount of players (1/2): "); 
      while (!scanner.hasNextInt()) { 
       System.out.println("That's not a number!"); 
       scanner.next(); // this is important! 
     } 

     amountOfPlayers = scanner.nextInt(); 
     while ((amountOfPlayers <= 0) || (amountOfPlayers > 2)); 
     System.out.println("You've selected " + amountOfPlayers+" player(s)."); 
    } 
} 
+2

için java bazı iyi kullanımıdır? Hangi davranışları görüyorsun? –

cevap

36

, böylece, bir derleyici uyarı olsun.

Scanner scanner = null; 
try { 
    scanner = new Scanner(System.in); 
    //rest of the code 
} 
finally { 
    if(scanner!=null) 
     scanner.close(); 
} 

Hatta daha da iyisi: Yeni Try with resource statement kullanın:

try(Scanner scanner = new Scanner(System.in)){ 
    //rest of your code 
} 
+0

Yeni Tarayıcı (System.in) '' try-catch' bloğu ile çevrelenmeli mi? – Maroun

+0

@MarounMaroun zorunlu olarak değil. ama sonuç olarak nihayetinde blokları kapatmak için iyi bir uygulama. – PermGenError

+1

Teşekkürler, gerçekten Kaynakla Dene deyimi gibi, bir çekicilik gibi çalışır! –

0

bunu yakın yöntemidir çağırdığınızda Scanner Javadoc göre bu

Scanner scanner = new Scanner(System.in); 
int amountOfPlayers; 
do { 
    System.out.print("Select the amount of players (1/2): "); 
    while (!scanner.hasNextInt()) { 
     System.out.println("That's not a number!"); 
     scanner.next(); // this is important! 
    } 

    amountOfPlayers = scanner.nextInt(); 
} while ((amountOfPlayers <= 0) || (amountOfPlayers > 2)); 
if(scanner != null) { 
    scanner.close(); 
} 
System.out.println("You've selected " + amountOfPlayers+" player(s)."); 
4

, bu akışı kapatır deneyin. Genel olarak, bir kaynak oluşturan kod da onu kapatmaktan sorumludur. System.in kodunuz tarafından değil, VM tarafından başlatıldı. Bu durumda, Tarayıcıyı kapatmamak, uyarıyı göz ardı etmek ve niçin görmezden geldiğinize dair bir yorum eklemek güvenlidir. VM, gerektiğinde kapanmaya özen gösterecektir.

(Offtopic: "amount" yerine, "number" kelimesi çok sayıda oyuncu için daha uygun olacaktır. İngilizce benim ana dilim (Hollandalıyım) ve tam olarak aynı şeyi yapardım hata.)

1

Burada tarayıcı artık çalışmadığını söyleyebilirim Nasıl tarayıcı

try(Scanner sc = new Scanner(System.in)) { 

    //Use sc as you need 

} catch (Exception e) { 

     // handle exception 

}