2009-07-19 11 views
1

次のプログラムで私の驚いたことに、Eclipseコンソールはループ中に印刷されません。 "start:finish"だけが表示されます。 代わりにprintlnを使用します。 コメントの削除時にもそれがあります。 サプライズ:コンソールで "start:finish"という行をコピーすると、クリップボードにはすべての数字が印刷されます。 この現象の原因は何ですか?System.out.printをループでデバッグ(Eclipse)

public static void main(String[] args) { 
     System.out.print("start: "); 
     for (int i = 0; i < 10000; i++) { 
      // if (i > 1000 && i < 1010) 
       System.out.print(i + " "); 
     } 
     System.out.println("finish"); 
    } 
+0

動作が確認されました。奇妙な、日食ラップされた出力ストリームと何かを持っている必要があります。 – akarnokd

+0

どのeclipse-versionを使用していますか?私は3.4.1にあり、プログラムは私のために働く。 – Silfverstrom

+0

私のために働く場合。何か変わったEclipseの問題でなければならない。または、おそらく、あなたはいくつかの間違いをした;) – amorfis

答えて

0

まあ、そこには非常に長い行があります。したがって、Eclipseコンソールが確実に表示できる最大行長を超えている可能性があります。コンテンツはおそらくそこに印刷されています(コピー&ペースト時にクリップボードに表示されているが、レンダリングがうまくいかないことが原因です)。

+0

他のEclipseバージョンでも動作するように見えるので、最も可能性が高いので、バッファは "不可視" – Gerard

0

Javaでのprintlnまたは印刷(「\ n」)をC & Cでバッファをフラッシュし、バッファ内のすべてのものを印刷することを強制しますが、使用する印刷whitout任意の\ nを(改行)が、それは必ずしもプリントないとき++バッファー

0

動作が確認されました。奇妙な、日食ラップされた出力ストリームと何かを持っている必要があります。私のEclipse 3.5。おそらく、内部バッファリングは、適切にフラッシュされていない(または)行の幅が大きすぎると、出力を捨てます。

package tests; 

import java.io.BufferedOutputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.PrintStream; 

public class EclipsePrint { 
    public static void main(String[] args) { 
     ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
     PrintStream out = System.out; 
     System.setOut(new PrintStream(new BufferedOutputStream(bout), true)); 
     System.out.print("start: "); 
     for (int i = 0; i < 10000; i++) { 
       // if (i > 1000 && i < 1010) 
         System.out.print(i + " "); 
     } 
     System.out.println("finish"); 
     out.println(bout.size()); 
     out.println(bout.toString()); 

     bout = new ByteArrayOutputStream(); 
     System.setOut(new PrintStream(new BufferedOutputStream(bout), true)); 
     System.out.print("start: "); 
     for (int i = 0; i < 1000; i++) { 
       // if (i > 1000 && i < 1010) 
         System.out.print(i + " "); 
     } 
     System.out.println("finish"); 
     out.println(bout.size()); 
     out.println(bout.toString()); 
    } 
} 

コンソールバッファとして10^6文字まで使用することができます日食でRun/Debug:Console:console buffer size (characters)でコンソールの設定があります。最初のループがそれを超えています。

0

私の食生活で試しました。3.4/Mac OSx上限が1000のときはうまく印刷されましたが、10000の場合は表示が切り捨てられました。

System.out.printの代わりに、System.out.printlnを使用します。それは各行のためであり、それは10000のために私のために正常に動作します。

関連する問題