Jak poprawnie zamknąć Scanner działający w odrębnym wątku?

Jak poprawnie zamknąć Scanner działający w odrębnym wątku?
KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Witam

Odrębny wątek zajmuje się odczytywaniem danych z wejścia standardowego. Załóżmy że wątek główny działa w pętli nieskończonej i korzysta z danych zwróconych przez wątek odczytujący. Ale co w sytuacji gdy zatrzymam program zamykając okno aplikacji, jak poprawnie zamknąć zasób Scannera?

Kopiuj
 class SourceOfCMD implements Callable<String> {
        private Scanner scanner;
        public SourceOfCMD() {
            scanner = new Scanner(System.in);
        }
        @Override public String call() {
            try {
                System.out.println("Wprowadz komende:");
                String s = scanner.nextLine();
                return s;
            }
            catch(NoSuchElementException e) {
                System.out.println(e);
                System.exit(-1);
            }
            finally {
           
            }
            return null;
        }
    }

public class Main {
  public static void main(String[] args) throws Exception {
        while(true) {
           ...
        }
  }
}
KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 36
0

Poczytaj o try with resources

Kopiuj
try (Scanner scanner = new Scanner(new File("test.txt"))) {
    while (scanner.hasNext()) {
        System.out.println(scanner.nextLine());
    }
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.