2017-02-25 52 views
0

這似乎是一個簡單的問題,但我似乎無法來解決這個問題。我需要將輸出(從變量)輸出到控制檯,直到用戶按下任何鍵。印刷是在while循環完成這樣:打印輸出,直到鍵按下

int i; 
while((i=input.read())!=-1){ 
    System.out.print((char)i); 
} 
input.close(); 

的問題是,在輸入流從未到達它的終點,只有等待更多的字符進來,從而從執行阻止任何更多的代碼。用戶什麼時候停止輸出會非常明顯,所以我將這個責任交給用戶很好。不要緊,用戶如何告訴應用程序停止,只要它是快速,(如按空格,回車,或任何其他特定鍵是罰款)。

由於提前,
vikarjramun

回答

1

我想出了穿線控制檯輸入的首選解決方案。該線程更新打印代碼可訪問的變量,以便您可以在每個打印語句前檢查它。

import java.util.Scanner; 
import java.util.concurrent.atomic.AtomicBoolean; 

public class RunUntilKeyPressed { 
    static AtomicBoolean hasUserPressedKey = new AtomicBoolean(false); 

    public static void main(String[] args) { 

     Thread t = new Thread(() -> { 
      Scanner scan = new Scanner(System.in); 
      System.out.println(scan.next()); 
      hasUserPressedKey.set(true); 
      scan.close(); 
     }); 
     t.start(); 

     while(!hasUserPressedKey.get()) { 
      System.out.println(hasUserPressedKey); 
     } 
    } 
} 

該代碼將運行,直到用戶按下任意鍵(除空間),並輸入,因爲這是當scan.next()方法獲取輸入。

+0

此代碼可能無法正確除非你delcare hasUserPressedKey揮發性或工作使用的AtomicBoolean不是純布爾 – SergGr

+0

@SergGr好點的。我會做出改變 – Chris

+0

謝謝,我會嘗試了這一點 – vikarjramun