1
我正在開發基於控制檯的Java應用程序。我必須向用戶顯示選擇數據庫的建議。我正在使用Scanner
來讀取輸入,並使用單獨的線程來檢查輸入是否包含TAB
以打印建議。基於控制檯的應用程序不顯示建議
UPDATE
按照下文答案,我添加同步塊代碼和異常消失。但是,我在控制檯上看不到任何建議。以下是我目前的代碼:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Test {
private static List<String> suggestions = new ArrayList<>();
private static final Object lock = new Object();
public static void main(String[] arguments) {
suggestions.add("H2");
suggestions.add("Mongo");
suggestions.add("MySQL");
suggestions.add("Oracle");
suggestions.add("PostgreSQL");
suggestions.add("SQLite");
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a database name, press TAB for suggestions");
new Thread(new Runnable() {
public void run() {
while (true) {
synchronized (lock) {
if (scanner.hasNext()) {
String input = scanner.next();
if (input.contains("\\t")) {
System.out.println(getSuggestions(input));
}
}
}
}
}
}).start();
synchronized (lock) {
String selectedDatabase = scanner.nextLine();
System.out.println(selectedDatabase);
}
}
private static List<String> getSuggestions(String input) {
List<String> possibleSuggestions = new ArrayList<>();
for (String suggestion : suggestions) {
if (suggestion.startsWith(input)) {
possibleSuggestions.add(suggestion);
}
}
return possibleSuggestions;
}
}
請問有人請幫忙嗎?
所以是不是可以使用掃描儀用於此目的? – Beginner
我試過你的答案,但仍然得到相同的例外。 – Beginner
@Beginner您需要同步掃描器的所有訪問權限。不要忘記主線程中的scanner.nextLine()。 –