Q
打破與關鍵
0
A
回答
0
您可以將循環放入單獨的線程中。
import java.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
Thread t = new Thread(new Runnable() {
public void run() {
int cnt = 0;
while (true) {
System.out.println(cnt);
++cnt;
}
}
});
t.start();
System.in.read();
t.stop();
}
}
讓我們逐行分析;首先進口:
import java.*;
import java.io.*;
class Main {
然後,我們需要聲明主要拋出IOException異常,因爲我們將處理IO要求;顯然,更好的選擇是正確處理異常,但這只是一個簡單的測試。
public static void main(String[] args) throws IOException {
然後我們創建一個執行無限循環的線程;我們不會從這個線程進行IO調用。直到我們調用Thread.start(),並且直到我們撥打Thread.stop()纔開始線程。
Thread t = new Thread(new Runnable() {
public void run() {
int cnt = 0;
while (true) {
System.out.println(cnt);
++cnt;
}
}
});
現在我們開始線程;這個調用後的行將繼續與線程同時執行,所以我們將能夠等待用戶輸入並停止線程。
t.start();
System.in.read();
t.stop();
}
}
-2
最好使用這個。
boolean doLoop = true;
while(doLoop){
if(userTerminates()){ //user terminates it?
doLoop = false;
}
}
private boolean userTerminates(){
Scanner scanner = new Scanner(System.in);
//If you want that user terminates it with 'c' char
return scanner.nextLine().equals("c");
}
0
你可以有一個public
可變running
public static boolean running = true;
根據您要關閉它是什麼,你只是while
循環中檢查這一點。假設你想保持循環運行,而JFrame
可見。然後你只是讓你的循環看起來像這樣。
while (running) {
// Do stuff
running = frame.isVisible(); // Where frame is a JFrame instance.
}
或者你可以這樣做,沒有變量。
while (true) {
// Do stuff
if (!frame.isVisible()) {
break;
}
}
1
我認爲你最好的選擇是使用由另一個線程控制的標誌。你可以這樣做:
private volatile boolean keepRunning = true;
public synchronized void stopRunning() {
keepRunning = false;
}
public void someProcess() {
new Thread() {
public void run() {
try (Scanner scanner = new Scanner(System.in)) {
keepWaiting = true;
while(keepWaiting) {
String userInput = scanner.next();
if("s".equals(userInput)) {
stopRunning();
keepWaiting = false;
}
}
}
}
}.start();
while(keepRunning){
doWork();
}
}
循環應該保持運行,直到用戶輸入「s」。當然這是一個非常基本的實現,但你明白了。另外,你並不需要「stopRunning()」方法,該線程可以直接訪問該標誌,但如果你想從其他地方運行線程,則需要它。
相關問題
- 1. Python按鍵排序,打破關係
- 2. 打破POCO關係
- 3. 關鍵gradle eclipse插件3.6.2用Eclipse打破4.4.1
- 4. 爲什麼在Perl modulino打破測試中的'包'關鍵字?
- 5. 添加const關鍵字打破Path.Combine調用
- 6. Javascript中的break關鍵字僅僅意味着打破循環?
- 7. 打破形式與部分
- 8. IE打破與搜索
- 9. Angularjs - Resharper intellisense與TypeScript打破?
- 10. 如何打破進入VBA執行與蘋果鍵盤
- 11. 與www打字域打破jquery插件?
- 12. C#按鍵打破對象的移動
- 13. 是否可以打破複合鍵?
- 14. 打破,如果Esc鍵被按下
- 15. clang_complete是打破我的vim鍵綁定
- 16. 打開鍵盤破壞佈局
- 17. MySQL使用觸發器打破外鍵
- 18. 與關鍵
- 19. 與關鍵
- 20. array_pop()與關鍵
- 21. 與ngRoute模塊依賴關係打破角度渲染
- 22. 回覆關鍵破壞活動?
- 23. 破壞地圖(使用let關鍵字)
- 24. 打印與字典值相關的關鍵字
- 25. 茉莉花:Backbone.history.loadUrl打破無關測試
- 26. 使用旋轉關節打破繩索
- 27. 阿帕奇DirectorySlash關 - 網站打破
- 28. 開關/ if語句打破for循環
- 29. 在關鍵詞與關鍵字OR
- 30. 與破折號的數組鍵php 5
您不能在不中斷程序的情況下中斷程序。 – Maroun
您認爲如果不檢查它,您將能夠檢測到「一鍵輸入」,怎麼樣? – chrylis
我的意思是我不想在每次循環時都打斷循環,我不希望循環等待繼續鍵或休息鍵,我只是想用一個鍵來中斷正在進行的循環。 – theva