因此,我正在学习在玉米片(Java)中创建自己的SerialConsole
。我学会了使用Semaphore.P()
和Semaphore.V()
来等待用户输入。一切顺利,直到我尝试在C的getch()
中创建类似conio.h
的函数。
问题是,每当我调用Semaphore.P()时,即使已调用Semaphore.V(),它也将始终等待按下Enter
键后才能继续执行程序。我希望每当我按下一个键时,程序就可以恢复。
下面是我尝试过的一些代码。
Console.java
public class Console {
private SerialConsole console;
private Semaphore sem = new Semaphore(0);
private Runnable send, recv;
private char tempChar;
public Console() {
console = Machine.console();
send = new Runnable() {
@Override
public void run() {
sem.V();
}
};
recv = new Runnable() {
@Override
public void run() {
tempChar = (char) console.readByte();
sem.V();
}
};
console.setInterruptHandlers(recv, send);
}
public String nextLine() {
String result = "";
do {
sem.P();
if (tempChar != '\n') result += tempChar;
} while(tempChar != '\n');
return result;
}
public char getch() {
sem.P();
return tempChar;
}
}
Main.java
public class Main {
private Console console;
public Main() {
console = new Console();
char c = console.getch();
System.out.println(c);
}
}
有什么我想念的东西吗,或者有什么方法可以通过编程方式按Enter
键之类的东西?
PS:java.awt.Robot
不能在nachos项目中使用。
任何帮助将不胜感激。