web-dev-qa-db-ja.com

コンソールがユーザー入力を閉じるのを待つ

タスクを実行した後、「操作が完了しました」または「操作が失敗した」などのフィードバックと詳細なエラーをユーザーに提供する必要があるコンソールアプリケーションがあります。

問題は、単に「実行」させると、出力メッセージが出力されるが、その後すぐにコンソールが閉じて、メッセージを読む時間がないことです。

私が覚えている限りでは、C++では、すべてのコンソールアプリケーションは「終了するには任意のキーを押す」などで終了します。 C#では、この動作をシミュレートできます

Console.ReadKey();

しかし、どうすればJavaでそれを行うことができますか?私はScannerクラスを使用していますが、「input」がScannerの私のインスタンスであることを考えると:

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

「任意のキー」が機能しますが、ここでは戻り値を除き、これは非常に重要です。ポインタはありますか?

72
makoshichi

Javaでは、これはSystem.in.read()になります

88
x4u

通常、コンソールに接続されている場合にのみプログラムを待機させたいことを付け加えたいと思います。それ以外の場合( パイプライン の一部である場合など)、メッセージを出力したり、待機したりすることはできません。そのためには、次のようにJavaのConsoleを使用できます。

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();
    }
}
18
Petr Pudlák

Javaコンソール入力の問題は、それがバッファリングされた入力であり、続行するにはEnterキーが必要なことです。

これらの2つの議論があります: Javaでのキーボード方向キーの検出と操作 および コンソールでのJavaキーボード入力解析app

後者は JLine を使用して問題を解決しました。

私は個人的にそれを使用していません。

7
Reverend Gonzo

nextLine();を一時停止として使用できます

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

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

ただし、Enter以外のボタンを押すと、その後Enterを押す必要がありますが、scan.next();よりも優れていることがわかりました

6
MohammadAmin98

私はx4uが言ったことを入れました。 Eclipseは、その周りにtry catchブロックが必要だったので、生成してもらいました。

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

おそらく、あらゆる種類の機能を備えている可能性がありますが、コマンドラインウィンドウを終了しないことを望む初心者にとっては、これは問題ないはずです。

また、これがどれほど一般的かはわかりませんが(jarファイルを作成するのはこれが初めてです)、それはbatファイルを介してのみ実行されます。

Java.exe -jar mylibrary.jar

上記は、batファイルが同じフォルダーにあったものです。インストールの問題のようです。

Eclipseチュートリアルの由来: http://eclipsetutorial.sourceforge.net/index.html

答えのいくつかは、次のものからも来ました。 Oracle Thread

5
dim_voly

私は単純なハックを使用して、cmdコマンドを使用するようにウィンドウに要求し、それを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();
    }    
}
4
Anton Kasiyn
    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);

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

        s.nextLine();

    }

このnextlineは、Enterキーが押されるたびに次の行を実行するのに役立つため、かなり良いオプションです

2
Pranjal Gupta

簡単なトリック:

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();
0
S.H.Kashani