2017-09-27 5 views
1

以前の特定のメッセージが印刷されたかどうかに基づいてメッセージを印刷しようとしています。私はスキャナがここでおそらく解決策ではありません知っているが、私はまた、おそらく正しいではありませんSystem.console.readLine()のような何かを、してみてくださいたび、それはNullPointerExceptionをプリントアウト過去の印刷物からコンソールを読み取ろうとしていますJava

public class Main { 

    public static Runnable getRunnable() { 

    return() -> { 
     System.out.println("Hello from a thread"); 

    }; 
} 

public static void main(String[] args){ 

    new Thread(getRunnable()).start(); 

    Scanner scanner = new Scanner(System.in); 
    String name = scanner.next(); 

     if (name.equals("Hello from a thread")) { 
      System.out.println("Hi!"); 
    } else { 
      System.out.println("That's not nice"); 
     } 
    } 
} 

:ここに私のコードです。以前の出力を読み込むためにここで何を使用するのですか?

更新:もう一度やり直してみましたが、うまくいきませんでした。理由はわかりません。ここに私の更新されたコード

public static ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
public static PrintStream ps = new PrintStream(baos); 
public static PrintStream old = System.out; 

public static Runnable getRunnable() { 
    System.out.println("Hello from a thread"); 
    return() -> { 
     System.setOut(ps); 
     System.out.println("Hello from a thread"); 
    }; 
} 

public static void main(String[] args){ 

    new Thread(getRunnable()).start(); 

    try { 
     TimeUnit.SECONDS.sleep(3); 
    } catch (InterruptedException e) { 
     System.out.println("Somethings wrong!"); 
    } 

    System.out.flush(); 
    System.setOut(old); 
    if (baos.toString().equals("Hello from a thread")) { 
     System.out.println("Hello other thread!"); 
    } 

} 

}

+1

おそらくこれがあなたを助けるかもしれません。https://stackoverflow.com/questions/8708342/redirect-console-output-to-string-in-java –

答えて

1

System.out

System.outSystem.inないです通常コンソールに出力し、標準出力ストリーム、です。 System.inは標準入力ストリームであり、通常はコンソールから取得されます。 setOutsetIn、およびsetErrを使用してI/Oストリームを変更することができますので、inをソースから読み込み、outをそのソースに出力するにはリダイレクトする必要があります。

final List<Integer> list = new ArrayList<>(); 
System.setOut(new PrintStream(new OutputStream() { 
    public void write(int b) { 
     list.add(b); 
    } 
})); 
System.setIn(new InputStream() { 
    public int read() { 
     if (list.size() == 0) return -1; 
     return list.remove(0); 
    } 
}); 

を(さまざまな理由のために、あなたはおそらくsetErrので、あなたが適切にまだ出力事をすることができますをしたいということに注意してください。)

することができます:あなたは出力/入力を格納および取得するためのArrayListを使用して検討することこの実例を試してみてくださいhere

+0

しかし、このコードはどのように別の方法? – koory

関連する問題