如何在NACHOS(Java)中编写getch()?

时间:2019-07-09 05:17:58

标签: java nachos

因此,我正在学习在玉米片(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项目中使用。

任何帮助将不胜感激。

0 个答案:

没有答案