2017-01-26 12 views
1

まず、私の悪い英語を申し訳ありません。私は私の言語を話すフォーラムで自分の問題を書きました。しかし、私は答えを得ていませんでした。あなたが私を助けることを願っています。forループ内でSystem.out.println()が動作しません

forループを書き込むと、ループが終了したときにSystem.out.println()またはJTextArea.setText()コマンドが機能し始めます。私のコードの一部:

for(int pixelCount = 0;pixelCount<pixelLength;pixelCount++){ 

    System.out.println("Progress..:"+pixelCount+"/"+pixelLength); 



    int x = pixelCount%Image.getWidth(); 
    int y = pixelCount/Image.getWidth(); 
    if(isChange==1){ 
    if(new Color(Image.getRGB(x, y)).getRed()%2==0){ 
     Image.setRGB(x, y,new Color(new Color(Image.getRGB(x, y)).getRed()+1, 
            new Color(Image.getRGB(x, y)).getGreen(), 
            new Color(Image.getRGB(x, y)).getBlue(), 
            new Color(Image.getRGB(x, y)).getAlpha()).getRGB());} 
} 

ループは時には非常に長いです。だから私はループの進行状況を見るために画面にそれを印刷します。ボタンを押すとループが始まります。しかし、私がボタンを押すと、System.out.println()コマンドがその後に見えます。

EDIT:どのようにループに進捗を書き込むべきですか?

EDIT:私は問題を解決しました。 System.out.println()コマンドは正常に動作します。 forループが始まる前にreplaceコマンドがあります。プログラムは、forループが始まる前に時間を費やします。

+2

[SynchronizationとSystem.out.println]の複製があります。(http://stackoverflow.com/questions/9459657/synchronization-and-system-out-println) – Guy

+0

@Guy同期やマルチスレッドはありませんが、 OPのコードはここでは重複は関係ありません –

+0

@ErwinBolwidtおそらくもっと正確な重複がありますが、 'System.out.println'は同期されていないということです。そのため、ループが終了した後にのみ出力が表示されます。 – Guy

答えて

1

System.out.flush()のいずれかを印刷するか、System.err.printlnを使用してください。

System.outは、バッファがいっぱいになったとき、フラッシュするとき、またはシステムが有用であると判断したときに出力するバッファリングされたストリームです。 System.errはバッファリングされておらず、進捗情報などのデバッグおよび診断情報の優先ストリームでもあります。

+0

ご意見ありがとうございます。私は両方を試みた。しかし、それはまだ動作していません。 System.err.println()コマンドだけが赤でした。 – Salihcan

1

System.our.flush()の使用は、既にErwin Bolwidtが言及していました。出力の仕方は、使用するOS(および端末)のタイプによって大きく異なります。たとえば、* nixシステムの場合、Cursesに似た何らかのライブラリが考えられます(もともとはCライブラリですが、いくつかのJava実装があると確信しています)。

関連する問題