Đặt bảng điều khiển chờ người dùng nhập đóng lại


79

Tôi có một ứng dụng bảng điều khiển mà sau khi thực hiện các tác vụ của nó, phải đưa ra phản hồi cho người dùng, chẳng hạn như "hoạt động đã hoàn thành" hoặc "hoạt động không thành công" và lỗi chi tiết.

Vấn đề là, nếu tôi chỉ "để nó chạy", thông báo đầu ra sẽ được in ra nhưng giao diện điều khiển sẽ đóng ngay sau đó, không còn thời gian để đọc tin nhắn.

Theo như tôi nhớ, trong C ++, mọi ứng dụng console sẽ kết thúc bằng "nhấn phím bất kỳ để thoát" hoặc đại loại như vậy. Trong C #, tôi có thể mô phỏng hành vi này với

Console.ReadKey();

Nhưng làm thế nào tôi có thể làm điều đó trong Java? Tôi đang sử dụng lớp Máy quét, nhưng với "đầu vào" đó là phiên bản Máy quét của tôi:

input.next()
System.exit(0);

"Bất kỳ phím nào" sẽ hoạt động, ngoại trừ trả lại, đây là một vấn đề khá lớn ở đây. Bất kỳ gợi ý?

Câu trả lời:


101

Trong Java, điều này sẽ là System.in.read()


17
Điều này đáp ứng "Nhấn enter để thoát" nhưng không phải "Nhấn phím bất kỳ để thoát", vì nó sẽ không tiếp tục cho đến khi nhấn phím enter.
Niall Thomson

Tôi cho rằng "nhấn enter để thoát" vẫn tốt hơn là "nhấn bất kỳ phím nào NGOẠI TRỪ enter để thoát". Cảm ơn, điều đó sẽ làm cho tôi.
makoshichi

2
@marcolopes Tôi đến bữa tiệc hơi muộn, nhưng vì bạn đang hỏi về một ứng dụng, tôi đoán vấn đề là bạn đang để người dùng nhấn phím enter trong GUI hoặc một nơi nào khác trong ứng dụng. Họ cần nhấn phím enter trong bảng điều khiển, rất có thể sẽ chỉ hiển thị nếu bạn đang chạy nó trong IDE. Bạn sẽ cần một giải pháp khác nếu muốn nhấn enter trong ứng dụng.
Thunderforge

4
System.in.read () đọc chính xác một byte, nhưng ENTER có thể tạo ra 1 hoặc nhiều byte trên các nền tảng khác nhau, hãy nhớ CRLF trên Windows. Vì vậy, có thể các cuộc gọi đọc tiếp theo trực tiếp trả về LF từ CRLF của cuộc gọi đầu tiên và do đó ứng dụng hoàn toàn không đợi đầu vào.
Thorsten Schöning

22

Tôi muốn thêm rằng thông thường bạn sẽ muốn chương trình chỉ đợi nếu nó được kết nối với bảng điều khiển. Nếu không (chẳng hạn như nếu đó là một phần của đường ống dẫn ) thì không có điểm nào để in tin nhắn hoặc chờ đợi. Đối với điều đó, bạn có thể sử dụng Java Consolenhư sau:

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();
    }
}


7

Bạn chỉ có thể sử dụng nextLine();làm tạm dừng

import java.util.Scanner
//
//
Scanner scan = new Scanner(System.in);

void Read()
{
     System.out.print("Press any key to continue . . . ");
     scan.nextLine();
}

Tuy nhiên, bất kỳ nút nào bạn nhấn ngoại trừ Entercó nghĩa là bạn sẽ phải nhấn Enter sau đó nhưng tôi thấy nó tốt hơnscan.next();


Bạn cần sử dụngScanner scan=new Scanner(System.in);
ACV

5

Tôi đã sử dụng hack đơn giản, yêu cầu các cửa sổ sử dụng lệnh cmd và gửi nó đến 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();
    }    
}

3

Tôi đã đưa những gì x4u nói. Eclipse muốn có một khối thử nắm bắt xung quanh nó nên tôi để nó tạo cho tôi.

try {
        System.in.read();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Nó có thể có tất cả các loại chuông và còi trên đó nhưng tôi nghĩ rằng đối với người mới bắt đầu muốn cửa sổ dòng lệnh không thoát khỏi điều này sẽ ổn.

Ngoài ra, tôi không biết điều này phổ biến như thế nào (đây là lần đầu tiên tôi tạo tệp jar), nhưng nó sẽ không tự chạy, chỉ thông qua tệp dơi.

java.exe -jar mylibrary.jar

Trên đây là những gì tệp bat có trong cùng một thư mục. Có vẻ là một vấn đề cài đặt.

Hướng dẫn Eclipse đến từ: http://eclipsetutorial.sourceforge.net/index.html

Một số câu trả lời cũng đến từ: Oracle Thread


3
public static void main(String args[])
{
    Scanner s = new Scanner(System.in);

    System.out.println("Press enter to continue.....");

    s.nextLine();   
}

Đây nextlinelà một tùy chọn khá tốt vì nó sẽ giúp chúng ta chạy dòng tiếp theo bất cứ khi nào phím enter được nhấn.


1

Một thủ thuật đơn giản:

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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.