我只是想知道如何讓我的Java程序繼續運行,但始終準備好輸入。在沒有程序掛起的Java中輸入?
現在我正在使用一個緩衝區閱讀器並在一行中讀取,但這使得我的程序停止並等待輸入。我希望程序能夠繼續運行,但隨時可以隨時接受輸入,有沒有辦法做到這一點?
我只是想知道如何讓我的Java程序繼續運行,但始終準備好輸入。在沒有程序掛起的Java中輸入?
現在我正在使用一個緩衝區閱讀器並在一行中讀取,但這使得我的程序停止並等待輸入。我希望程序能夠繼續運行,但隨時可以隨時接受輸入,有沒有辦法做到這一點?
我希望你將不得不考慮你的應用程序的多線程,以達到你想要的效果。
編輯:當然,雖然這個功能可以通過一個純粹的CLI界面來實現,你可能會更好過研究其他方案(即GUI選項),如果你打算在具有充分反應/事件驅動系統以多線程方式運行。
我認爲你的程序將不得不偶爾輪詢用戶輸入。
給它一個很好的多線程圖形用戶界面,而不是一個CLI :)
我與詹姆斯同意,另一種方法是「假裝」連續程序運行。這不適用於所有場景,但您可以在顯示用戶輸入之前設置一個計時器,然後計算停止時間和用戶輸入內容時「再次啓動」之間的時間。
使用該時間執行重複函數一定次數。這隻有在你已經有了一些定時器本身時纔會有幫助,例如每隔幾秒鐘就會有一個不斷耗盡的整數。
一個例子:
您詢問用戶的問題,但只希望給他們5秒鐘回答。當用戶回答(命中輸入)時,程序將計算他們輸入的時間,如果時間太長,則輸出一條消息,如果在時間限制內又投了另一條消息。
我只是建議這種方法,因爲線程,這是你真正想進入,是相當先進的。
下面是一個多線程命令行界面應用程序如何工作的簡單示例。這不需要輪詢輸入,也不需要GUI界面,以便在控制檯中等待來自用戶的輸入時在後臺執行任務。
在此示例中,Thread
正在後臺運行,可以告訴它在指定的秒數後輸出問候語。
public class CommandLineMultiThread
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
// Makes and runs the background thread.
MyThread myThread = new MyThread();
Thread t = new Thread(myThread);
t.start();
// Get the number of seconds to wait from the console.
// Exit when "0" is entered.
int waitDuration;
do
{
waitDuration = s.nextInt();
myThread.setGreetIn(waitDuration);
} while (waitDuration != 0);
myThread.quit();
}
static class MyThread implements Runnable
{
boolean running = true; // Boolean to keep thread alive.
long greetingTime = Long.MAX_VALUE; // Time to greet at.
public void setGreetIn(int i)
{
greetingTime = System.currentTimeMillis() + (i * 1000);
}
public void quit()
{
running = false;
}
public void run()
{
while (running)
{
if (System.currentTimeMillis() > greetingTime)
{
System.out.println("Hello!");
greetingTime = Long.MAX_VALUE;
}
try
{
Thread.sleep(100);
}
catch (InterruptedException e) {}
}
}
}
}
Scanner
的類可用於通過從System.in
對象路由輸入,以接受來自命令行界面的用戶輸入。
然後,當後臺線程myThread
正在運行時,主線程正在通過Scanner.nextInt
方法等待來自System.in
的輸入。一旦等待的秒數被接受,後臺線程被告知等待一段時間,一旦到達該時間,問候語Hello!
被輸出到控制檯。
我發現線程有些複雜,不要因此而氣餒,它絕對是複雜的。如果你這樣做,試試別的東西。 – Organiccat 2009-05-14 15:41:20
我什麼也沒有,只能時間玩耍並學習它,謝謝 – 2009-05-14 15:42:21
關於CLI接口的評論看起來像是一條紅色的鯡魚。完全可以通過一個「CLI界面」程序來處理用戶輸入,同時在後臺執行其他任務。例如,以「頂部」程序爲例。 – 2009-05-14 16:14:37