なぜ次のテストコードのための正しい順序で出力されません:有効「-ea」とのEclipse(Java)の中にコンソールが時系列/正しい順序で出力事をしません
public static void main(String[] args) {
boolean test = false;
try {
assert test: "will fail with -ea enabled in VM args" ;
} catch (AssertionError e) {
e.printStackTrace();
System.out.println("idk why you would use this but...");
}
System.out.println(test + " sneaks in between");
}
実行これをVM引数(実行設定)で
ランダム出力のいずれかです:
java.lang.AssertionError: will fail with -ea enabled in VM args
at Main.main(Main.java:31)
FOO
BAR
(起こるべき)か:
java.lang.AssertionError: ERROR
FOO
BAR
at Main.main(Main.java:31)
は時々(起こるべきではありません)と:これが起こったときに
java.lang.AssertionError: ERROR
FOO
at Main.main(Main.java:31)
BAR
私は、 "アサート" をいじりました。私はコードが完全なナンセンスだと知っていますが、他の設定でも起こる可能性があります。 Seconldyコンソールは、多くのプログラムでは、主にデバッグ用に正式なものとして使用されていません。しかしそれはまだ変わっています。
try catchが別のスレッドで実行されているためですか?または他のものの前に一押しすることは、お互いの後にとても速く起こっているものですか?
私はThread.sleep(1)を追加しています。 (投げたり捕らえたりする必要があります) それは常に時系列順に進みます。
なぜコードは時系列で印刷されませんか?
はい、e.printStackTrace(System.out)を使用してPrintStreamを指定すると正しい結果が得られます。 (テキストが赤でないことを除いて) – AgentM
私も推測します:http://stackoverflow.com/questions/6121786/java-synchronizing-standard-out-and-standard-errorそれでは答えても、 (編集)note I printStackTrace()がSystem.err出力ストリームを使用していることを知らなかったので、私はそれについても考えませんでした。 – AgentM