タスクを実行した後、「操作が完了しました」または「操作が失敗した」などのフィードバックと詳細なエラーをユーザーに提供する必要があるコンソールアプリケーションがあります。
問題は、単に「実行」させると、出力メッセージが出力されるが、その後すぐにコンソールが閉じて、メッセージを読む時間がないことです。
私が覚えている限りでは、C++では、すべてのコンソールアプリケーションは「終了するには任意のキーを押す」などで終了します。 C#では、この動作をシミュレートできます
Console.ReadKey();
しかし、どうすればJavaでそれを行うことができますか?私はScannerクラスを使用していますが、「input」がScannerの私のインスタンスであることを考えると:
input.next()
System.exit(0);
「任意のキー」が機能しますが、ここでは戻り値を除き、これは非常に重要です。ポインタはありますか?
Javaでは、これはSystem.in.read()
になります
通常、コンソールに接続されている場合にのみプログラムを待機させたいことを付け加えたいと思います。それ以外の場合( パイプライン の一部である場合など)、メッセージを出力したり、待機したりすることはできません。そのためには、次のように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();
}
}
Javaコンソール入力の問題は、それがバッファリングされた入力であり、続行するにはEnterキーが必要なことです。
これらの2つの議論があります: Javaでのキーボード方向キーの検出と操作 および コンソールでのJavaキーボード入力解析app
後者は JLine を使用して問題を解決しました。
私は個人的にそれを使用していません。
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();
よりも優れていることがわかりました
私は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
私は単純なハックを使用して、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();
}
}
public static void main(String args[]) {
Scanner s=new Scanner(System.in);
System.out.println("Press enter to continue.....");
s.nextLine();
}
このnextline
は、Enterキーが押されるたびに次の行を実行するのに役立つため、かなり良いオプションです
簡単なトリック:
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();