Mam aplikację konsolową, która po wykonaniu swoich zadań musi przekazać użytkownikowi informację zwrotną typu „operacja zakończona” lub „operacja nie powiodła się” oraz szczegółowy opis błędu.
Rzecz w tym, że jeśli po prostu „pozwolę mu działać”, komunikat wyjściowy zostanie wydrukowany, ale konsola zamknie się wkrótce potem, nie pozostawiając czasu na przeczytanie wiadomości.
O ile pamiętam, w C ++ każda aplikacja konsolowa kończy się komunikatem „naciśnij dowolny klawisz, aby wyjść” lub czymś w tym rodzaju. W C # mogę symulować to zachowanie za pomocą pliku
Console.ReadKey();
Ale jak mogę to zrobić w Javie? Używam klasy Scanner, ale biorąc pod uwagę, że „input” to moja instancja Scanner:
input.next()
System.exit(0);
„Dowolny klucz” zadziała, z wyjątkiem powrotu, co jest tutaj dość dużym problemem. Jakieś wskazówki?
źródło
import java.io.IOException;
wymagane jest również dodanie .Chciałbym dodać, że zazwyczaj chcesz, aby program czekał tylko wtedy, gdy jest podłączony do konsoli. W przeciwnym razie (na przykład jeśli jest to część potoku ) nie ma sensu drukować wiadomości ani czekać. W tym celu możesz użyć Javy w
Console
ten sposób:import java.io.Console; // ... public static void waitForEnter(String message, Object... args) { Console c = System.console(); if (c != null) { // printf-like arguments if (message != null) c.format(message, args); c.format("\nPress ENTER to proceed.\n"); c.readLine(); } }
źródło
Problem z wejściem konsoli Java polega na tym, że jest to buforowane dane wejściowe i wymaga klawisza Enter, aby kontynuować.
Istnieją dwie dyskusje: Wykrywanie i działanie na klawiszach kierunkowych klawiatury w Javie i analizie analizy danych wejściowych z klawiatury w aplikacji konsoli
Ten ostatni użył JLine do rozwiązania swojego problemu.
Osobiście go nie używałem.
źródło
Możesz po prostu użyć
nextLine();
jako pauzyimport java.util.Scanner // // Scanner scan = new Scanner(System.in); void Read() { System.out.print("Press any key to continue . . . "); scan.nextLine(); }
Jednak każdy przycisk, który naciśniesz, z wyjątkiem
Enter
oznacza, że będziesz musiał nacisnąć Enter po tym, ale znalazłem to lepiej niżscan.next();
źródło
Scanner scan=new Scanner(System.in);
Użyłem prostego hackowania, prosząc Windows o użycie poleceń cmd i wysłanie go do null.
// Class for Different hacks for better CMD Display import java.io.IOException; public class CMDWindowEffets { public static void getch() throws IOException, InterruptedException { new ProcessBuilder("cmd", "/c", "pause > null").inheritIO().start().waitFor(); } }
źródło
Wpisałem to, co powiedział x4u. Eclipse potrzebowało bloku try catch wokół niego, więc pozwoliłem mu go wygenerować.
try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Prawdopodobnie może mieć na nim różnego rodzaju dzwonki i gwizdki, ale myślę, że dla początkujących, którzy chcą, aby okno wiersza poleceń nie wychodziło, powinno być w porządku.
Nie wiem też, jak często się to zdarza (po raz pierwszy robię pliki jar), ale nie działałoby to samo, tylko przez plik bat.
Powyższe jest tym, co plik bat miał w tym samym folderze. Wydaje się, że jest to problem z instalacją.
Samouczek Eclipse pochodzi z: http://eclipsetutorial.sourceforge.net/index.html
Część odpowiedzi również pochodziła z: Oracle Thread
źródło
public static void main(String args[]) { Scanner s = new Scanner(System.in); System.out.println("Press enter to continue....."); s.nextLine(); }
Jest
nextline
to całkiem dobra opcja, ponieważ pomoże nam uruchomić następną linię za każdym razem, gdy zostanie naciśnięty klawisz Enter.źródło
Prosta sztuczka:
import java.util.Scanner; /* Add these codes at the end of your method ...*/ Scanner input = new Scanner(System.in); System.out.print("Press Enter to quit..."); input.nextLine();
źródło