2017-11-21 115 views
5

Walczę z próbą znalezienia sposobu na wprowadzenie podstawowego ruchu klawiszy w oknie konsoli. Znalazłem skrypt C#, który po prostu używa instrukcji switch i niektórych zmiennych, ale mój nauczyciel nalega na używanie Javy.Jak zaimplementować podstawowy ruch klawiszem strzałki w oknie konsoli za pomocą java?

Z innych wątków wszystkie odpowiedzi zdawały się wskazywać, że nie jest to możliwe w Javie, chyba że zainstalujesz pewne ("popraw mnie, jeśli źle") "ramy" takie jak JNA i/lub Jline, ale jako początkujący nie mam pojęcia, co to jest te rzeczy nawet znaczą.

Teraz przed powiedzieć, mój nauczyciel jest idiotą myśląc mogliśmy zrobić, on nigdy nie powiedział, że to musiał być strzałka-klucz ruch, po prostu pomyślałem, że byłoby fajnie :)

+2

Wziąłem udział w przegłosowaniu, ponieważ jest to coś, nad czym zastanawiałem się przez jakiś czas, ale nie zawracałem sobie głowy badaniami. Widzę, dlaczego inni mogliby to zlekceważyć (nie ma takiej próby), ale jest to interesujące, związane z programowaniem i pokazuje, że OP przeprowadził pewne badania. – byxor

+0

używać KeyEvent w awt, z tym samym mechanizmem używanym w języku C#. Włącz przełącznik wykrytego KeyEvent. Daj mi znać, jeśli potrzebujesz więcej wyjaśnień, dodam odpowiedź –

Odpowiedz

3

To jest trudniejsze niż się wydaje, głównie z powodu sposobu, w jaki Java działa na różnych platformach. Podstawowym rozwiązaniem do odczytu z klawiatury jest użycie stdin, tak:

InputStream in = System.in; 

    int next = 0; 
    do { 
     next = in.read(); 
     System.out.println("Got " + next); 
    } while (next != -1); 

Teraz istnieje dwa problemy:

  1. Na platformach UNIX nie zostanie wydrukowany następny znak, jak to jest wciśnięty, ale dopiero po naciśnięciu klawisza powrotu, ponieważ system operacyjny domyślnie buforuje wejście
  2. Nie ma kodu ascii dla klawiszy strzałek, zamiast tego są to tak zwane sekwencje specjalne, które zależą od używanego emulatora terminala, więc na moim Mac, jeśli uruchomię powyższy kod i uderzę strzałką w górę, a następnie kluczem zwrotnym otrzymam następujące wyjścia:

    Got 27 // escape 
    Got 91 
    Got 65 
    Got 10 // newline 
    

Nie ma dobrą platformą niezależny sposób obejść ten problem, jeśli targetting tylko platformach UNIX javacurses może pomóc.