4

Javaで出力を動的に変更する方法はありますか?たとえば、次の場合はターミナルウィンドウで次のようになります。

System.out.print("H")

そして私は持っています:

System.out.print("I")

出力は次のようになります。

HI

文字を動的に置き換えることができる位置を出力に割り当てる方法はありますか?たとえば(そして、これは私が望むものを出力しないことを私は知っています、私は単に私の考えを示したいだけです)これ:

 System.out.print("H")
 Thread.sleep("1")
 System.out.print("I")

そしてそれは最初に印刷されます

H

そして1秒後、HをIに置き換えますか?

これはばかげているように聞こえると思います。GUIを使用せずにコンテンツを動的に変更することに興味があります。誰かが私をこのテクニックの方向に向けることができますか?事前にどうもありがとうございました。

4

4 に答える 4

2

\b前の文字をバックスペースして消去するために使用できます。

$ cat T.java
import java.lang.Thread;

public class T {
    public static void main(String... args) throws Exception {
        System.out.print("H");
        System.out.flush();
        Thread.sleep(1000);
        System.out.print("\bI\n");
        System.out.flush();
    }
}
$ javac T.java && java T
I

出力し、 1秒後Hに交換します。I

残念ながら、Eclipseコンソールでは機能しませんが、通常のコンソールでは機能します。

于 2012-10-30T20:07:52.270 に答える
2

あなたは見てみたいかもしれません

System.out.printf

ここに示されている例を見てください:http://masterex.github.com/archive/2011/10/23/java-cli-progress-bar.html

編集:

printfはフォーマットされた文字列を表示します。つまり、そのフォーマットを適応させ、必要に応じて変更することができます。

たとえば、次のようなことができます。

String[] planets = {"Mars", "Earth", "Jupiter"};        
String format = "\r%s says Hello";

for(String planet : planets) {
    System.out.printf(format, planet);
try { 
        Thread.sleep(1000); 
    }catch(Exception e) { 
        //... oh dear
    }
}

ここにあるフォーマットされた文字列構文を使用します: http: //docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax

コメントによると、このソリューションは1行に限定されていますが、ニーズによってはこれで十分な場合があります。

画面全体の解決策が必要な場合、考えられる解決策は(かなり汚れていますが)、JNAを使用してオペレーティングシステムをフックし、コンソールウィンドウのハンドルを取得し、その高さを見つけてから、println()をループして「クリア」することです。 "その後、ウィンドウは出力を再描画します。

詳細をお読みになりたい場合は、さらに質問にお答えするか、リンクをご覧ください:https ://github.com/twall/jna

于 2012-10-30T20:02:55.433 に答える
2

これはあなたが必要とするものです(前の出力を上書きするためにキャリッジリターン'\ r'を使用します):

  System.out.print("H");
  Thread.sleep(1000);
  System.out.print("\rI");
于 2012-10-30T20:11:10.233 に答える
1

この種のことを行うために通常使用されるCライブラリはと呼ばれcursesます。(PythonなどのCライブラリへのバインディングに依存するスクリプト言語からも使用されます。)JCursesなどのJavaバインディングを使用できます。グーグルはまた、ランテルナと呼ばれる純粋なJavaの同等物が利用可能であると私に言います。

于 2012-10-30T20:02:52.953 に答える